Skip to content

Instantly share code, notes, and snippets.

@wowothk
Last active May 6, 2020 16:09
Show Gist options
  • Save wowothk/bb3388e1640ec51406563dcbefbed172 to your computer and use it in GitHub Desktop.
Save wowothk/bb3388e1640ec51406563dcbefbed172 to your computer and use it in GitHub Desktop.

Local Variable

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)

Instance Variable

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.

Class Variable

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.

Perbedaan Class Variabel dan Variabel Instan

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
  1. Availability to instance methods

    • Variabel instan hanya tersedia di class_method dan tidak tersedia ketika dipanggil instance_method.
    • Class Variabel tersedia di kedua-duanya
  2. Inheritability

    • Variabel instan akan hilang di subclass
    • Class Variabel tidak

Global Variable

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment