PowerShell - Değişkenin Boş mu yoksa Boş mu olduğunu kontrol edin


Betik yazarken en yaygın görevlerden biri, PowerShell'de bir değişkenin NULL veya Boş olup olmadığını kontrol etmektir. Null veya boş değerler her zaman biraz zordur çünkü tam olarak null nedir?

Bir değerin null olup olmadığını kontrol etmek PowerShell 7'de Null birleştirme işleçleri sayesinde çok daha kolay hale geldi. Bu operatör, bir değerin Null olup olmadığını kontrol etmek için if-else ifadelerine olan ihtiyacı ortadan kaldırır.

Bu makalede bir değerin null, null değil veya sadece boş olup olmadığının nasıl kontrol edileceğini açıklayacağım. Yeni Null-coalescing operatörüne ve karşılaştırmada $null değişkeniyle başlamanın neden önemli olduğuna bakıyoruz.

Boş Nedir?

Bir programlama veya komut dosyası dilinde NULL'dan bahsettiğimizde, bunun herhangi bir değeri olmayan bir değişken olduğunu varsayabiliriz. Ancak PowerShell'de Null boş bir değer veya bilinmeyen bir değer olabilir.

NULL değeri PowerShell'de $null olarak yazılır ve otomatik değişkenlerden biridir. NULL değerine sahip bir nesnedir. Bu, $null öğesini koleksiyonlarda yer tutucu olarak kullanmanıza veya bunu bir değişkene atamanıza olanak tanır.

Bunu göstermenin iyi bir yolu, bir koleksiyon oluşturmak ve onun uzunluğunu saymaktır. Aşağıdaki örnekte görebileceğiniz gibi $null nesnesi koleksiyondaki nesnelerden biri olarak sayılır:

$fruits = "Apple", $null, "Pear"
$fruits.count
3

NULL ve Boş

PowerShell'de $null değerlerinin yanı sıra boş değerlerimiz de olabilir. İkisi arasındaki fark, boş bir değerin, bildirilen ve gerçek bir boş değere atanan bir değişken olmasıdır.

Aşağıdaki örneğe bakarsak, NULL değişkenini ona atamamış olsak bile ilk değişken $null olur. Diğer değişkenler null değil fakat boş.

# Null variable
$variableIsNull

# Empty string variable
$emptyString = ""

# Empty array variable
$emptyArray = @()

PowerShell'de Null olup olmadığını kontrol edin

PowerShell'de bir değişkenin veya sonucun Null olup olmadığını kontrol etmenin birkaç yolu vardır. Bir değerin NULL olup olmadığını kontrol etmenin önerilen yolu, $null değerini değerle karşılaştırmaktır:

if ($null -eq $value) {
    Write-Host 'Variable is null';
}

Yukarıdaki yöntemin iki durumda true değerine döndüğünü unutmamak önemlidir. Beklediğiniz gibi değer NULL olduğunda, ancak aynı zamanda değişken tanımlanmadığında da.

Bir değerin Null Değil olup olmadığını kontrol etmek istediğinizde bunun yerine -ne karşılaştırma operatörünü kullanabilirsiniz:

if ($null -ne $value) {
    Write-Host 'Variable is not null';
}

Bir değerin Null olup olmadığını kontrol etmenin diğer bir yaygın yolu, herhangi bir karşılaştırma yapmadan basitçe if ifadesini kullanmaktır. Bu da işe yarar ancak bir değerin boş olup olmadığını kontrol etmekten daha fazlasını yapar. Aşağıdaki karşılaştırma aslında aşağıdakileri yapacaktır:

  • geçersiz değil

  • boş değil

  • 0 değil

  • bir dizi değil,

  • Uzunluk 0'a eşit değil

  • $yanlış değil

if ($value) {
    Write-Host 'Variable is not null or empty';
}

Sol tarafta boş

PowerShell betiklerinizi yazmak için Visual Studio kodunu veya başka bir IDE kullandığınızda, karşılaştırmada $null değişkenini sağ tarafa yerleştirdiğinizde bir uyarı alırsınız. Bunun iyi bir nedeni var.

Bazı durumlarda bunları $null sağ tarafa yerleştirmek beklenmedik sonuçlara yol açabilir. Örneğin aşağıdaki diziyi ele alalım. Eğer $null'ı sol tarafa yerleştirirsek, $null'un bizim $array'ımıza eşit olup olmadığını kontrol edecektir, ki bu da değildir , yani true değerini döndürür.

# Array
$a = 1, 2, $null, 4, $null, 6

# Check if the Array is not empty (null)
$null -ne $a  # returns true

# Return everything from the array that is not Null
$a -ne $null

# Returns
1
2
4
6

Ancak $null öğesini sağ tarafa yerleştirdiğinizde dizideki her şeyi döndürür, bu da $null'a eşit değildir.

Boş birleştirme operatörü

PowerShell 7 kullanıyorsanız ve gerçekten kullanmanız gerekiyorsa, bir değişkenin veya özelliğin boş olup olmadığını hızlı bir şekilde kontrol etmek için yeni boş koşullu işleçlerden birini kullanabilirsiniz. Bu şekilde, yalnızca bir değişkenin boş olup olmadığını kontrol etmek istediğinizde If ifadeleri yazmanıza gerek kalmaz.

Boş birleştirme operatörü ??, boş değilse sol taraftaki değeri döndürür. Soldaki değer null ise sağ taraftaki sonuçları döndürür.

$nullableVariable = $null

# If $nullableVariable equal NULL, return "Default Value"
$defaultValue = $nullableVariable ?? "Default Value"

# Result of $defaultValue
The value is: Default Value

Bu yöntemi bir işlevin sonucunu kontrol etmek ve sonuçlar boşsa başka bir işlevi veya cmdlet'i çağırmak için de kullanabiliriz:

function Get-LastUsedDate {
    return $null
}

# Use null-coalescing operator to handle null return value
$result = (Get-LastUsedDate) ?? (Get-Date).ToShortDateString()

Boş olmayan ilk değişkeni bulmak veya döndürmek için birden fazla Boş Birleştirme işlecini birlikte zincirlemek de mümkündür.

# Define a chain of variables where one may be null
$firstVariable = $null
$secondVariable = "Value 2"

# Use null-coalescing operator to choose the first non-null value
$chosenValue = $firstVariable ?? $secondVariable ?? "No value found"

# Output the chosen value
Write-Host "Chosen value: $chosenValue"

Boş birleştirme Atama Operatörü

Null-coalescing atama operatörü ??=, operatörün sol tarafındaki bir değişkenin null olup olmadığını kontrol etmeyi ve sağ taraftaki değeri ona atamayı kolaylaştırır eğer boşsa.

Aşağıdaki örnekte $existingValue değişkeninin null olup olmadığını kontrol ediyoruz. Eğer null ise değişkeni varsayılan değere ayarlıyoruz:

# Variable that may or may not have a value
$existingValue = "Existing Value"

# Assign a new value using the Null-coalescing assignment operator
$existingValue ??= "Default Value"

# Result of $existingValue
Existing Value

Boş koşullu operatörler ?. ve ?[]

PowerShell 7.1'deki yenilikler arasında Boş koşullu işleçler ?. ve ?[] yer alıyor. Bu operatörler, bir nesnenin null olabilecek özelliklerine ve öğelerine güvenli bir şekilde erişmenizi sağlar.

Bir özelliğe veya öğeye boş koşullu operatör olmadan erişirseniz normalde hata almazsınız. Yalnızca Katı modu kullanıyorsanız bir hata alırsınız. Dolayısıyla bu durumlarda, boş değerli bir nesnenin bir üyesine erişmeye çalışıp çalışmadığınızı kontrol etmek önemlidir.

# Empty object
$cities = $null

# Set strictmode for test
Set-StrictMode -Version 2

# Will throw an error
$cities.language

# No error with null-conditional operator
${cities}?.language

PowerShell'de Boş olup olmadığını kontrol edin

Bir değerin Null olup olmadığını kontrol etmenin yanı sıra başka bir yaygın uygulama da bir değerin boş olup olmadığını kontrol etmektir. PowerShell'de yalnızca bir dizenin veya dizinin boş olup olmadığını kontrol edebilirsiniz.

Bir dizenin boş olup olmadığını kontrol etmek için onu "" ile karşılaştırmanız yeterlidir.

$string = ""

if ($string -eq "") {
    write-host "Empty string found"
}

Bir dizinin boş olup olmadığını kontrol etmek istiyorsanız en iyi seçenek dizinin uzunluğunu kontrol etmektir:

$array = @()

if ($array.Count -gt 0) {
    write-host "Array is not empty"
}

IsNullOrEmpty

Dizelerle çalışırken değerin boş mu yoksa boş mu olduğunu kontrol etmek için statik dize işlevini de kullanabilirsiniz. Değerin boş mu yoksa boş mu olduğunu bilmek istiyorsanız önüne yalnızca -not koymanız gerekir.

$string = $null

if ([String]::IsNullOrEmpty($string)) {
    write-host "Empty string"
}

# Check if not empty or null
if (-not [String]::IsNullOrEmpty($string)) {
    write-host "Striong is Not empty"
}

Bir Fonksiyonda Null olup olmadığını kontrol edin

PowerShell'de kendi işlevlerinizi oluştururken ValidateNotNullOrEmpty doğrulayıcısını kullanarak bir parametrenin null veya boş olmadığından emin olabilirsiniz. Bu şekilde fonksiyonda ek kontroller yapmanıza gerek kalmaz.

function Test-Input {
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$input
    )
    
    Write-Host "Input received: $input"
}

# Test the function
Test-Input -input "Hello"

Kapanış

Null değerlerinin kontrol edilmesi komut dosyanızı daha sağlam hale getirir ve komut dosyanızda daha az hata oluşmasına neden olur. Yeni PowerShell boş birleştirme işleçlerini denediğinizden emin olun çünkü bunlarla çalışmak oldukça kullanışlıdır.

Ayrıca karşılaştırmanın sol tarafında her zaman $null değerlerini tuttuğunuzdan emin olun.

Umarım bu makaleyi beğenmişsinizdir, herhangi bir sorunuz varsa aşağıya yorum bırakmanız yeterli!

İlgili makaleler