Bagikan melalui


5. Variabel

Catatan editorial

Penting

Windows PowerShell Language Specification 3.0 diterbitkan pada Desember 2012 dan didasarkan pada Windows PowerShell 3.0. Spesifikasi ini tidak mencerminkan status PowerShell saat ini. Tidak ada rencana untuk memperbarui dokumentasi ini untuk mencerminkan status saat ini. Dokumentasi ini disajikan di sini untuk referensi historis.

Dokumen spesifikasi tersedia sebagai dokumen Microsoft Word dari Pusat Unduhan Microsoft di: https://www.microsoft.com/download/details.aspx?id=36389 Dokumen Word telah dikonversi untuk presentasi di sini di Microsoft Learn. Selama konversi, beberapa perubahan editorial telah dilakukan untuk mengakomodasi pemformatan untuk platform Dokumen. Beberapa kesalahan ketik dan kesalahan kecil telah dikoreksi.

Variabel mewakili lokasi penyimpanan untuk nilai, dan nilai tersebut memiliki jenis. Bahasa pemrograman prosedural tradisional ditentukan secara statis, artinya, tipe variabel saat runtime adalah tipe yang sama dengan tipe yang dideklarasikan pada waktu kompilasi. Bahasa yang berorientasi objek menambahkan gagasan pewarisan, yang memungkinkan tipe variabel pada saat runtime bisa menjadi tipe yang sama seperti yang dideklarasikan pada waktu kompilasi atau beberapa jenis turunan dari tipe tersebut. Menjadi bahasa yang diketik secara dinamis, variabel PowerShell tidak memiliki jenis, per se. Bahkan, variabel tidak didefinisikan; mereka hanya menjadi ketika mereka pertama kali diberi nilai. Dan sementara variabel dapat dibatasi (§5,3) untuk menyimpan nilai jenis tertentu, informasi jenis dalam penugasan tidak selalu dapat diverifikasi secara statis.

Pada waktu yang berbeda, variabel dapat dikaitkan dengan nilai dari berbagai jenis baik melalui penugasan (§7,11) atau penggunaan operator ++ dan ‑‑ (§7,1,5, §7,2,6). Ketika nilai yang terkait dengan variabel diubah, jenis nilai tersebut dapat berubah. Misalnya

$i = "abc"        # $i holds a value of type string
$i = 2147483647   # $i holds a value of type int
++$i              # $i now holds a value of type double because
                  # 2147483648 is too big to fit in type int

Setiap penggunaan variabel yang belum dibuat menghasilkan nilai $null. Untuk melihat apakah variabel telah ditentukan, gunakan cmdlet Test-Path.

5.1 Lokasi dapat ditulisi

Lokasi yang dapat ditulis adalah sebuah ekspresi yang menunjukkan sumber daya di mana perintah memiliki akses baca dan tulis. Lokasi yang dapat ditulis mungkin variabel (§5), elemen array (§9), nilai terkait dalam Hashtable yang diakses melalui subskrip (§10), properti (§7.1.2), atau penyimpanan yang dikelola oleh penyedia (§3,1).

5.2 Kategori variabel

PowerShell menentukan kategori variabel berikut: variabel statis, variabel instans, elemen array, pasangan kunci/nilai hashtable, parameter, variabel biasa, dan variabel pada drive penyedia. Sub-bagian yang mengikuti menjelaskan masing-masing kategori ini.

Dalam contoh berikut

function F ($p1, $p2) {
    $radius = 2.45
    $circumference = 2 * ([Math]::PI) * $radius

    $date = Get-Date -Date "2010-2-1 10:12:14 pm"
    $month = $date.Month

    $values = 10, 55, 93, 102
    $value = $values[2]

    $h1 = @{ FirstName = "James"; LastName = "Anderson" }
    $h1.FirstName = "Smith"

    $Alias:A = "Help"
    $Env:MyPath = "E:\Temp"
    ${E:output.txt} = 123
    $Function:F = { "Hello there" }
    $Variable:v = 10
}
  • [Math::PI] adalah variabel statis
  • $date.Month adalah variabel instance
  • $values[2] adalah elemen array
  • $h1.FirstName adalah kunci Hashtable yang nilainya sesuai adalah $h 1['FirstName']'
  • $p1 dan $p2 adalah parameter
  • $radius, $circumference, $date, $month, $values, $value, dan $h1 adalah variabel biasa
  • $Alias:A, $Env:MyPath, ${E:output.txt}, dan $Function:F adalah variabel pada drive penyedia yang sesuai.
  • $Variable:v sebenarnya adalah variabel biasa yang ditulis dengan drive penyedia yang sudah memenuhi semua syarat.

5.2.1 Variabel statis

Anggota data dari sebuah objek yang merupakan bagian dari tipe objek tersebut, bukan dari instans tertentu tipe tersebut, disebut variabel statis . Lihat §4.2.3, §4.2.4.1, dan §4.3.8 untuk beberapa contoh.

PowerShell tidak menyediakan cara untuk membuat jenis baru yang berisi variabel statis; namun, objek jenis tersebut dapat disediakan oleh lingkungan host.

Memori untuk membuat dan menghapus objek yang berisi variabel statis dikelola oleh lingkungan host dan sistem pengumpulan sampah.

Lihat §7.1.2 untuk informasi tentang mengakses variabel statis.

Anggota data statis bisa menjadi bidang atau properti.

5.2.2 Variabel instans

Anggota data dari objek yang termasuk dalam instans tertentu dari jenis objek, bukan pada jenis itu sendiri, disebut variabel instans. Lihat §4.3.1, §4.3.2, dan §4.3.3 untuk beberapa contoh.

Lingkungan host PowerShell mungkin menyediakan cara untuk membuat jenis baru yang berisi variabel instans atau untuk menambahkan variabel instans baru ke jenis yang ada.

Memori untuk membuat dan menghapus objek yang berisi variabel statis dikelola oleh lingkungan host dan sistem pengumpulan sampah.

Lihat §7.1.2 untuk informasi tentang mengakses variabel instans.

Anggota data instans dapat berupa bidang atau properti.

5.2.3 Elemen array

Array dapat dibuat melalui operator koma satuan (§7.2.1), sub-ekspresi (§7.1.6), ekspresi array (§7.1.7), operator koma biner (§7.3), operator rentang (§7.4), atau cmdlet New-Object.

Memori untuk membuat dan menghapus array dikelola oleh lingkungan host dan sistem pengumpulan sampah.

Array dan elemen array dibahas dalam §9.

5.2.4 Pasangan kunci/nilai tabel hash

Hashtable dibuat melalui hash literal (§2.3.5.6) atau cmdlet New-Object. Pasangan kunci/nilai baru dapat ditambahkan melalui operator [] (§7.1.4.3).

Memori untuk membuat dan menghapus Hashtable dikelola oleh lingkungan host dan sistem pengumpulan sampah.

Hashtables dibahas pada §10.

5.2.5 Parameter

Parameter dibuat ketika perintah induknya dipanggil, dan diinisialisasi dengan nilai argumen yang disediakan dalam pemanggilan atau oleh lingkungan host. Parameter berhenti ada ketika perintah induknya berakhir.

Parameter dibahas dalam §8.10.

5.2.6 Variabel biasa

Variabel biasa didefinisikan oleh ekspresi penugasan (§7.11) atau foreach-statement (§8.4.4). Beberapa variabel biasa telah ditentukan sebelumnya oleh lingkungan host sementara yang lain bersifat sementara, datang dan berjalan sesuai kebutuhan pada runtime.

Masa hidup variabel biasa adalah bagian dari eksekusi program di mana penyimpanan dijamin tersedia untuk itu. Masa pakai ini dimulai pada entri ke dalam cakupan yang terkait dengannya, dan berakhir tidak lebih cepat dari akhir eksekusi cakupan tersebut. Jika cakupan induk dimasukkan secara rekursif atau berulang, instans baru variabel lokal dibuat setiap kali.

Penyimpanan yang dimaksud oleh variabel biasa akan diklaim kembali terlepas dari masa pakai variabel tersebut.

Variabel biasa dapat diberi nama secara eksplisit dengan Variabel : awalan namespace (§5.2.7).

5.2.7 Variabel pada drive penyedia layanan

Konsep penyedia dan drive diperkenalkan dalam §3.1, dengan setiap penyedia mampu menyediakan drive ruang nama miliknya sendiri. Ini memungkinkan sumber daya pada drive tersebut diakses seolah-olah mereka adalah variabel biasa (§5.2.6). Bahkan, variabel biasa disimpan dalam drive penyedia sistem file: (§3.1.5) dan dapat diakses dengan nama biasa atau nama ruang nama yang sepenuhnya memenuhi syarat.

Beberapa jenis variabel namespace dibatasi secara implisit (§5,3).

5.3 Variabel yang dibatasi

Secara default, variabel dapat menunjuk nilai dari jenis apa pun. Namun, variabel mungkin dibatasi untuk menunjuk nilai dari jenis tertentu dengan menentukan jenis tersebut sebagai jenis literal sebelum namanya dalam penugasan atau parameter. Misalnya

[int]$i = 10   # constrains $i to designating ints only
$i = "Hello"   # error, no conversion to int
$i = "0x10"    # ok, conversion to int
$i = $true     # ok, conversion to int

function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }

Variabel apa pun yang termasuk dalam namespace Env:, Alias:, atau ke namespace sistem file (§2.3.2, §3.1) dibatasi secara implisit untuk jenis string. Variabel apa pun yang termasuk dalam namespace Function: (§2.3.2, §3.1) dibatasi secara implisit ke jenis scriptblock.