Variabel Lokal (Local Variable) merupakan variabel yang memiliki ciri-ciri diawali dengan lowercase huruf dari a-z
atau underscore (_)
. Selain itu variabel lokal juga hanya dapat diakses pada tempat di mana variabel tersebut dideklarasikan. Dimisalkan sebagai berikut
age = 10
def add(x,y)
x + y
end
puts add(5,5)
Variabel age, x, dan y merupakan variabel lokal. Dalam hal ini x atau y tidak tidak terdefinisi ketika berada di luar method. Sementara sebaliknya age tidak terdefinisi apabila di dalam method. Setelah kita dideklarasikan script di atas misalnya kita print x dengan menambahkannya di bagian paling bawah dari skrip di atas.
puts x
Maka akan diperoleh error sebagaimana berikut
undefined local variable or method `x' for main:Object (NameError)
Variabel instan (Instance Variable) merupakan variabel yang biasa diawali dengan simbol @
. Sama dengan class variabel tapi nilai bersifat lokal untuk objek yang spesifik. Variabel instan tersedia di seluruh metode untuk instance atau objek tertentu mis. Variabel instance dapat berubah dari objek ke objek. Perbedaan dengan class variabel adalah variabel ini tidak memerlukan inisialisasi. Adapun ketika tidak diinisialisasi maka variabel tersebut bernilai nil
. Sebagai contoh, diberikan script berikut
class Customer
def initialize(id, name, addr)
# Instance Variables
@cust_id = id
@cust_name = name
@cust_addr = addr
end
# displaying result
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.display_details()
cust2.display_details()
Diperoleh output sebagai berikut,
Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
Nampak bahwasanya variabel instan @cust_id, @cust_name, dan @cust_addr dapat dipergunakan di method berbeda di dalam satu kelas yang sama.
Biasa diawali dengan simbol @@
, merupakan variabel yang dapat bekerja pada objek berlainan tanpa mengubah nilai iniliasisainya. Disini diharuskan untuk diinisialisasi. Apabila tidak diinisialisasi maka akan error. Sebagai contoh diberikan script berikut
class Customer
# class variable
@@no_of_customers = 0
def initialize(id, name, addr)
# An instance Variable
@cust_id = id
@cust_name = name
@cust_addr = addr
end
# displaying result
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
def total_no_of_customers()
# class variable
@@no_of_customers += 1
puts "Total number of customers: #@@no_of_customers"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.display_details()
cust1.total_no_of_customers()
cust2.display_details()
cust2.total_no_of_customers()
Diperoleh output sebagai berikut
Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Total number of customers: 1
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
Total number of customers: 2
Pada contoh tersebut class variabel @@no_of_customers bekerja pada setiap kali ia dipanggil pada objek tertentu tanpa menghilangkan keumumannya.
Dalam hal ini diberikan contoh dari stackoverflow.com sebagai berikut
class Vars
@class_ins_var = "class instance variable value" #class instance variable
@@class_var = "class variable value" #class variable
def self.class_method
puts @class_ins_var
puts @@class_var
end
def instance_method
puts @class_ins_var
puts @@class_var
end
end
Vars.class_method
puts "see the difference"
obj = Vars.new
obj.instance_method
class VarsChild < Vars
end
VarsChild.class_method
Script tersebut akan menghasilkan output sebagai berikut
class instance variable value
class variable value
see the difference
class variable value
class variable value
-
Availability to instance methods
- Variabel instan hanya tersedia di
class_method
dan tidak tersedia ketika dipanggilinstance_method
. - Class Variabel tersedia di kedua-duanya
- Variabel instan hanya tersedia di
-
Inheritability
- Variabel instan akan hilang di subclass
- Class Variabel tidak
Variabel Global (Global Variable) merupakan variabel yang biasa diawali dengan $
. Variabel ini merupakan variabel dengan privileged
tertinggi dimana variabel ini dapat berlaku di semua class. Secara default ketika variabel ini tidak inisialisasi maka akan bernilai nil dan menyebabkan penggunaannya menjadi samar dan kompleks. Contohnya sebagai berikut
$global_variable = 10
class Class1
def print_global
puts "Global variable in Class1 is #$global_variable"
end
end
class Class2
def print_global
puts "Global variable in Class2 is #$global_variable"
end
end
class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global
Diperoleh output sebagai berikut
Global variable in Class1 is 10
Global variable in Class2 is 10
sumber: geeksforgeeks.org