Variabel Instans di Ruby

Variabel instan dimulai dengan tanda at (@) dan hanya dapat dirujuk dalam metode kelas. Mereka berbeda dari variabel lokal dalam hal mereka tidak ada dalam variabel tertentu cakupan. Sebagai gantinya, tabel variabel yang serupa disimpan untuk setiap instance kelas. Variabel instance hidup dalam instance kelas, jadi selama instance itu tetap hidup, demikian juga variabel instance.

Variabel instan dapat dirujuk dalam metode apa pun dari kelas itu. Semua metode kelas menggunakan contoh yang sama tabel variabel, sebagai lawan dari variabel lokal di mana setiap metode akan memiliki tabel variabel yang berbeda. Dimungkinkan untuk mengakses variabel instan tanpa terlebih dahulu mendefinisikannya. Ini tidak akan menimbulkan pengecualian, tetapi nilai variabel akan menjadi nol dan peringatan akan dikeluarkan jika Anda telah menjalankan Ruby dengan -w beralih.

Contoh ini menunjukkan penggunaan variabel instan. Perhatikan bahwa peristiwa berisi -w switch, yang akan mencetak peringatan jika terjadi. Juga, catat penggunaan yang salah di luar metode dalam lingkup kelas. Ini tidak benar dan dibahas di bawah.

instagram viewer

Kenapa itu @uji variabel salah? Ini ada hubungannya dengan ruang lingkup dan bagaimana Ruby mengimplementasikan sesuatu. Dalam suatu metode, cakupan variabel instance merujuk ke instance tertentu dari kelas itu. Namun, dalam lingkup kelas (di dalam kelas, tetapi di luar metode apa pun), cakupannya adalah contoh kelas cakupan. Ruby mengimplementasikan hierarki kelas dengan membuat instance Kelas benda, jadi ada a contoh kedua sedang bermain di sini. Pertama contoh adalah contoh dari Kelas kelas, dan ini adalah di mana @uji akan pergi. Contoh kedua adalah instantiation dari TestClass, dan ini adalah di mana @nilai akan pergi. Ini agak membingungkan, tapi ingatlah untuk tidak pernah menggunakannya @instance_variables di luar metode. Jika Anda membutuhkan penyimpanan kelas-lebar, gunakan @@ class_variables, yang dapat digunakan di mana saja dalam ruang lingkup kelas (di dalam atau di luar metode) dan akan berperilaku sama.

Anda biasanya tidak dapat mengakses variabel instan dari luar objek. Misalnya, dalam contoh di atas, Anda tidak bisa begitu saja menelepon nilai atau nilai t untuk mengakses variabel instance @nilai. Ini akan melanggar aturan enkapsulasi. Ini juga berlaku untuk instance dari kelas anak, mereka tidak dapat mengakses variabel instan milik kelas induk meskipun mereka secara teknis tipe yang sama. Jadi, untuk memberikan akses ke variabel instan, pengakses metode harus dideklarasikan.

Contoh berikut menunjukkan bagaimana metode pengakses dapat ditulis. Namun, perhatikan itu Rubi menyediakan jalan pintas dan bahwa contoh ini hanya ada untuk menunjukkan kepada Anda cara kerja metode accessor. Biasanya tidak umum untuk melihat metode pengakses ditulis dengan cara ini kecuali diperlukan semacam logika tambahan untuk pengakses.

Cara pintas membuat segalanya sedikit lebih mudah dan lebih kompak. Ada tiga metode penolong ini. Mereka harus dijalankan dalam lingkup kelas (di dalam kelas tetapi di luar metode apa pun), dan akan secara dinamis mendefinisikan metode seperti metode yang didefinisikan dalam contoh di atas. Tidak ada keajaiban yang terjadi di sini, dan mereka terlihat seperti kata kunci bahasa, tetapi mereka benar-benar hanya metode yang mendefinisikan secara dinamis. Juga, pengakses ini biasanya berada di puncak kelas. Itu memberi pembaca ikhtisar instan yang variabel anggota akan tersedia di luar kelas atau ke kelas anak.

Ada tiga metode pengakses ini. Mereka masing-masing mengambil daftar simbol yang menggambarkan variabel instan yang akan diakses.

  • attr_reader - Tentukan metode "pembaca", seperti nama metode dalam contoh di atas.
  • attr_writer - Tentukan metode "penulis" seperti umur = metode dalam contoh di atas.
  • attr_accessor - Tetapkan metode "pembaca" dan "penulis".

Kapan menggunakan Variabel Instance

Sekarang Anda tahu variabel instan apa, kapan Anda menggunakannya? Variabel instan harus digunakan ketika mereka mewakili keadaan objek. Nama dan usia siswa, nilai mereka, dll. Mereka tidak boleh digunakan untuk penyimpanan sementara, untuk itulah variabel lokal digunakan. Namun, mereka mungkin dapat digunakan untuk penyimpanan sementara antara panggilan metode untuk perhitungan multi-tahap. Namun jika Anda melakukan ini, Anda mungkin ingin memikirkan kembali komposisi metode Anda dan menjadikan variabel-variabel ini sebagai parameter metode.

instagram story viewer