Variabel Global di Ruby

Variabel global adalah variabel yang dapat diakses dari mana saja dalam program ini terlepas dari cakupannya. Mereka dilambangkan dengan diawali dengan karakter $ (tanda dolar). Namun, penggunaan variabel global sering dianggap "tidak-Ruby," dan Anda jarang melihatnya.

Mendefinisikan Variabel Global

Variabel global didefinisikan dan digunakan seperti variabel lainnya. Untuk mendefinisikannya, cukup berikan nilai kepada mereka dan mulailah menggunakannya. Tetapi, seperti namanya, menetapkan variabel global dari titik mana pun dalam program ini memiliki implikasi global. Program berikut menunjukkan ini. Metode ini akan mengubah variabel global, dan itu akan memengaruhi cara kedua metode berjalan.


$ speed = 10. def mempercepat. $ speed = 100. akhir. def pass_speed_trap. jika $ speed> 65. # Beri program tiket yang ngebut. akhir. akhir. mempercepat. pass_speed_trap. 

Tidak populer

Jadi mengapa ini "un-Ruby" dan mengapa Anda tidak sering melihat variabel global? Sederhananya, itu merusak enkapsulasi. Jika ada satu kelas atau metode yang dapat mengubah keadaan variabel global sesuai keinginan tanpa lapisan antarmuka, apa pun kelas atau metode lain yang bergantung pada variabel global itu mungkin berperilaku tidak terduga dan tidak diinginkan cara. Lebih lanjut, interaksi seperti itu bisa sangat sulit untuk di-debug. Apa yang mengubah variabel global itu dan kapan? Anda akan melihat melalui banyak kode untuk menemukan apa yang melakukannya, dan itu bisa dihindari dengan tidak melanggar aturan enkapsulasi.

instagram viewer

Tetapi itu tidak berarti bahwa variabel global tidak pernah digunakan di Ruby. Ada sejumlah variabel global khusus dengan nama karakter tunggal (a-la Perl) yang dapat digunakan di seluruh program Anda. Mereka mewakili keadaan program itu sendiri, dan melakukan hal-hal seperti memodifikasi catatan dan pemisah lapangan untuk semua mendapat metode.

Variabel Global

  • $0 - Variabel ini, dilambangkan dengan $ 0 (itu nol), menyimpan nama skrip tingkat atas yang dieksekusi. Dengan kata lain, file skrip yang dijalankan dari garis komando, bukan file skrip yang menyimpan kode yang sedang dijalankan. Jadi jika script1.rb dijalankan dari baris perintah, itu akan menahan script1.rb. Jika naskah ini membutuhkan script2.rb, $ 0 dalam file skrip juga script1.rb. Nama $ 0 mencerminkan konvensi penamaan yang digunakan dalam skrip shell UNIX untuk tujuan yang sama.
  • $* - Argumen baris perintah dalam array yang dilambangkan dengan $ * (tanda dolar dan tanda bintang). Misalnya, jika Anda menjalankan ./script.rb arg1 arg2, maka $ * akan setara dengan % w {arg1 arg2}. Ini setara dengan spesial ARGV array dan memiliki nama yang kurang deskriptif, sehingga jarang digunakan.
  • $$ - ID proses penerjemah, dilambangkan dengan $$ (dua tanda dolar). Mengetahui ID proses sendiri sering berguna dalam program daemon (yang berjalan di latar belakang, tidak terhubung dari terminal apa pun) atau layanan sistem. Namun, ini menjadi sedikit lebih rumit ketika ada thread yang terlibat, jadi berhati-hatilah menggunakannya secara membabi buta.
  • $ / dan $ \ - Ini adalah pemisah rekaman input dan output. Saat Anda membaca objek menggunakan mendapat dan mencetaknya menggunakan menempatkan, ini menggunakan ini untuk mengetahui kapan "catatan" lengkap telah dibaca, atau apa yang harus dicetak antara banyak catatan. Secara default, ini harus menjadi karakter baris baru. Tetapi karena ini mempengaruhi perilaku semua objek IO, mereka jarang digunakan, jika sama sekali. Anda dapat melihatnya dalam skrip yang lebih kecil di mana melanggar aturan enkapsulasi tidak menjadi masalah.
  • $? - Status keluar dari proses anak terakhir dieksekusi. Dari semua variabel yang tercantum di sini, ini mungkin yang paling berguna. Alasannya sederhana: Anda tidak bisa mendapatkan status keluar dari proses anak dengan nilai pengembalian dari sistem metode, hanya benar atau salah. Jika Anda harus mengetahui nilai pengembalian aktual dari proses anak, Anda perlu menggunakan variabel global khusus ini. Sekali lagi, nama variabel ini diambil dari shell UNIX.
  • $_ - String terakhir dibaca mendapat. Variabel ini mungkin menjadi titik kebingungan bagi mereka yang datang ke Ruby dari Perl. Dalam Perl, the $ _ variabel berarti sesuatu yang serupa, tetapi sama sekali berbeda. Di Perl, $_ memegang nilai pernyataan terakhir dan di Ruby itu menyimpan string yang dikembalikan oleh yang sebelumnya mendapat doa. Penggunaannya mirip, tetapi apa yang mereka pegang sangat berbeda. Anda juga tidak sering melihat variabel ini (kalau dipikir-pikir, Anda jarang melihat variabel-variabel ini), tetapi Anda mungkin melihatnya dalam program Ruby yang sangat singkat yang memproses teks.

Singkatnya, Anda jarang akan melihat variabel global. Itu sering merupakan bentuk yang buruk (dan "un-Ruby") dan hanya benar-benar berguna dalam skrip yang sangat kecil, di mana implikasi penuh penggunaannya dapat sepenuhnya dihargai. Ada beberapa variabel global khusus yang dapat digunakan, tetapi sebagian besar, mereka tidak digunakan. Anda tidak benar-benar perlu tahu banyak tentang variabel global untuk memahami sebagian besar program Ruby, tetapi Anda setidaknya harus tahu bahwa mereka ada di sana.

instagram story viewer