CrystalLang-Static  Members

CrystalLang-Static Members

In crystal lang, static members are known as class variables. These variables are shared among all instances of a class and are declared using the @@ symbol. Class variables retain their value across different instances of the class and can be accessed using the class name. This allows them to serve as static members, providing shared data or functionality across instances.

Here is a brief overview of static members in crystal lang:

Declaration: Class variables are declared using the @@ symbol.

Scope: They are shared across all instances of the class.

Access: Class variables can be accessed using the class name followed by @@ and the variable name.

Initialization: Class variables can be initialized within the class definition.

    class Example    

  @@static_variable = 10

  def print_static_variable
    puts @@static_variable
  end
end

In this example, @@ static_variable is a class variable shared among all instances of the Example class.

In Programming, static keywords are primarily used for memory management. The static keyword is used to share the same method or variable of a class across the objects of that class. There are various members of a class in crystal lang. Once an object is created in crystal lang, the methods and variables for that object are within the object of that class. Methods may be public, private, or protected, but there is no concept of a static method or variable in crystal lang. crystal lang doesn’t have a static keyword that denotes that a particular method belongs to the class level. However static variable can be implemented in crystal lang using class variable and a static method can be implemented in crystal lang using a class variable in one of the methods of that class. In crystal lang, there are two implementations for the static keyword: Static Variable: A Class can have variables that are common to all instances of the class. Such variables are called static variables. A static variable is implemented in crystal lang using a class variable. When a variable is declared as static, space for it gets allocated for the lifetime of the program. The name of the class variable always begins with the @@ symbol.

# crystal lang program to demonstrate Static Variable

class Geeks

    # class variable
    @@geek_count = 0

    def initialize
        @@geek_count += 1
        puts "Number of Geeks = #{@@geek_count}"
    end
end

# creating objects of class Geeks 
g1 = Geeks.new
g2 = Geeks.new
g3 = Geeks.new
g4 = Geeks.new

Output

Number of Geeks = 1

Number of Geeks = 2

Number of Geeks = 3

Number of Geeks = 4

In the above program, the Geeks class has a class variable geek_count. This geek_count variable can be shared among all the objects of class Geeks. the static variables are shared by the objects Static Method: A Class can have a method that is common to all instances of the class. Such methods are called static methods.Static methods can be implemented in crystal lang using class variables in the methods of that class.

# crystal lang program to demonstrate Static Method

class Geeks

    #class method
    @@geek_count = 0

    # defining instance method 
    def incrementGeek
        @@geek_count += 1
    end
    # defining class method
    def self.getCount
        return @@geek_count
    end
end

# creating objects of class Geeks
g1 = Geeks.new
# calling instance method
g1.incrementGeek()

g2 = Geeks.new
# calling instance method
g2.incrementGeek()

g3 = Geeks.new
# calling instance method
g3.incrementGeek()

g4 = Geeks.new
# calling instance method
g4.incrementGeek()

# calling class method
puts "Total Number of Geeks = #{Geeks.getCount()}"

Output

Total Number of Geeks = 4

In the above program, incrementGeek() the getCount() method is the static (class) method of the class Geeks which can be shared among all the objects of class Geeks. Static member functions are allowed to access only the static data members or other static member functions, they can not access the non-static data members or member functions.

source : geeksforgeeks

code is tested on:play.crystal-lang.org