Skip to main content
added 221 characters in body
Source Link
Nova
  • 181
  • 1
  • 7

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Edit: Some people seem a bit confused about "Prompt-Menu". Just ignore that and pretend that Prompt-LicenseToGrant and Prompt-LicenseToRevoke have their own unique implementation of a menu for the user to select from.

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Edit: Some people seem a bit confused about "Prompt-Menu". Just ignore that and pretend that Prompt-LicenseToGrant and Prompt-LicenseToRevoke have their own unique implementation of a menu for the user to select from.

Syntax highlighting for "Powershell". Trim unnecessary self-referential text.
Source Link

I'd like opinions on this design choice...

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke
function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Hopefully that's enough context to form a meaningful discussion, although I'm sure people would have some more questions about the rest of the program, if so, what would those questions be?

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

I'd like opinions on this design choice...

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Hopefully that's enough context to form a meaningful discussion, although I'm sure people would have some more questions about the rest of the program, if so, what would those questions be?

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke
Question Protected by gnat
Became Hot Network Question
Source Link
Nova
  • 181
  • 1
  • 7

When should a function be given an argument vs getting the data itself?

I'd like opinions on this design choice...

When is it better to pass data to a function in a parameter, and when is it better for the function to just fetch the data itself?

Here's some simplified examples in PowerShell:

Option 1 (give the function what it needs)

function Prompt-LicenseToGrant($availableLicenses)
{
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$availableLicenses = Get-AvailableLicenses
$licenseToGrant = Prompt-LicenseToGrant $availableLicenses
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($assignedLicenses)
{
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$assignedLicenses = Get-UserLicenses $user
$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Option 2 (function just gets what it needs)

function Prompt-LicenseToGrant
{
    $availableLicenses = Get-AvailableLicenses
    $selection = Prompt-Menu $availableLicenses
    return $selection
}

$licenseToGrant = Prompt-LicenseToGrant
Grant-License -User $user -License $licenseToGrant

function Prompt-LicenseToRevoke($user)
{
    $assignedLicenses = Get-UserLicenses $user
    $selection = Prompt-Menu $assignedLicenses
    return $selection
}

$licenseToRevoke = Prompt-LicenseToRevoke $assignedLicenses
Revoke-License -User $user -License $licenseToRevoke

Hopefully that's enough context to form a meaningful discussion, although I'm sure people would have some more questions about the rest of the program, if so, what would those questions be?