BẮT ĐẦU
KIỂU DỮ LIỆU
TOÁN TỬ
NÂNG CAO
INTERVIEW
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Các loại biến và cách sử dụng Module trong Ruby

Bất kì một ngôn ngữ lập trình nào đều có khái niệm biến và Ruby cũng không ngoại lệ, đây là kiến thức nền tảng trong lập trình mà hầu như lập trình viên nào cũng phải học đầu tiên.

Và ngoài ra trong mỗi ngôn ngữ đều có một đặc thù riêng, đối với ngôn ngữ Ruby sẽ có khái niệm Module. Vậy Module là gì thì chúng ta cùng nhau theo dõi để hiểu rõ hơn về nó.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Module trong Ruby là gì?

Module là một tập các phương thức, lớp, hằng số, do đó module cũng gần giống như class, chỉ khác là module không thể tạo các đối tượngkhông thể thừa kế.

Thường thì chúng ta sẽ gộp các lớp, phương thức và hằng số có liên quan với nhau vào một module để tránh xung đột tên. Nếu bạn đã từng làm việc với C#Java thì có thể nói module trong Ruby tương đương với namespace trong C# và package trong Java vậy.

Cách mà chúng ta tạo ra một module ở trong Ruby. Thực sự rất rất đơn giản.

Module Ruby
module MyFirstModule
  def say_hello
    “Hello, My name's Tăng Quốc Minh”
  end
end

Để sử dụng được các method của module ở trong các class chúng ta thường "include" hay "extend" những module này vào trong các class đó. include hay extend module vào trong một class nghĩa là class đó có thể truy cập các phương thức được khai báo ở trong module.

  • Đối với include: Khi ta sử dụng include module vào trong class thì các phương thức trong module sẽ được xem là instance method trong class
  • Đối với extend: Khi ta sử dụng extend module vào trong class thì các phương thức trong module sẽ được xem là class method trong class
include or extend module in ruby
module MyFirstModule
  def say_hello
    'Hello, I am a Module'
  end
end

class A
  include  MyFirstModule
end

class B
  extend  MyFirstModule
end

puts A.new.say_hello
puts B.say_hello

Kết quả sau khi chạy chương trình

module ruby

Ở trong class A ta sử dụng include cho nên ta gọi phương thức say_hello phải thông qua một đối tượng. Trong class B ta sử dụng extend nên ta sẽ gọi nó như là một class method.

2. Các loại biến trong Ruby

Trong Ruby có 5 loại biến mà chúng ta cần lưu ý:

  • Biến cục bộ (local variable)
  • Biến đối tượng (instance variable)
  • Biến toàn cục (global variable)
  • Biến lớp (class variable)
  • Hằng (constant): Một số bạn vẫn hay nhầm lẫn giữa hằng số và biến, thực ra hằng số củng được xem như là biến, nhưng tính chất của mỗi biến là khác nhau.

Biến cục bộ (local variable)

Phạm vi sử dụng của biến cục bộ phụ thuộc vào vị trí của biến khi khai báo.

local variable
#irb 
local_variable = 'Toi nam ngoai method.'
def variable_scope
    puts local_variable = 'Toi nam trong method.'
end

variable_scope #Toi nam trong method
puts local_variable #Toi nam ngoai method

Ta thấy mặc dù có cùng tên nhưng giá trị in ra là khác nhau, vì biến local_variable ở trong phương thức variable_scope không có liên quan gì với biến local_variable ở ngoài phương thức. Mặc dù chúng có cùng tên biến. Biến này ta thường hay dùng trong một phương thức

Biến đối tượng (instance variable)

Biến được bắt đầu bằng ký tự @ được gọi là "Biến Đối Tượng", có nghĩa là nó chỉ thuộc về một đối tượng riêng lẻ hoặc một đối tượng của một lớp.

instance variable
class Nguoi

  def initialize(ten)
    @ten = ten
  end

  def show
    puts @ten
  end
end

first = Nguoi.new('Quoc')
first.show # Quoc

second = Nguoi.new('Minh')
second.show # Minh

Ở ví dụ trên ta thấy instance variable chỉ thuộc riêng lẻ cho mỗi đối tượng và phạm vi sử dụng của nó là toàn bộ trong một lớp.

Biến toàn cục (global variable)

Khác với biến cục bộ, biến toàn cục được khai báo với tên bắt đầu bằng ký tự $ và biến toàn cục có phạm vi sử dụng trong toàn bộ chương trình. Đối với bạn nào đã từng học về PHP thì rất dễ bị nhớ nhầm lẫn biến này trong Ruby lắm nhé.

global variable
$global_variable = 'Toi chua duoc thay doi.'

def variable_scope
    puts $global_variable = 'Toi da bi thay doi.'
end

variable_scope #Toi da bi thay doi.
$global_variable #Toi da bi thay doi.

Ta thấy, khi giá trị của biến toàn cục thay đổi ở trong phương thức, thì sự thay đổi này ảnh hưởng ra tới bên ngoài phương thức. Như vậy, phạm vi của biến toàn cục là toàn bộ chương trình. Các bạn nên hạn chế sử dụng biến này nếu như không cần thiết.

Biến lớp (class variable)

Để định nghĩa biến thuộc class, chúng ta sử dụng ký tự @@ trước tên biến. Khác với instance variable, class variable sẽ được dùng chung cho tất cả các đối tượng của lớp đó.

class variable
class Dog

  def initialize(leg)
    @@leg = leg
  end

  def show_leg
    puts @@leg
  end

end

first = Dog.new(4)
first.show_leg # 4

second = Dog.new(10)
second.show_leg # 10

first.show_leg # 10

Như ví dụ trên ta thấy biến @@leg đã bị thay đổi sau khi đối tượng second được tạo.

Hằng (constant)

Hằng trong Ruby củng giống như một biến, ngoại trừ giá trị của hằng sẽ không bị thay đổi trong quá trình chương trình chạy. Nếu như ta đã khai báo hằng sau đó overwrite lại giá trị của hằng thì vẫn được nhưng trình thông dịch của Ruby sẽ cảnh báo đã tồn tại. Tên hằng số phải được viết hoa

constant
AT_CONST = 105
AT_CONST = 205

"warning: already initialized constant AT_CONST"

3. Quy tắc đặt tên file, phương thức, biến, class và module

Trong bất kỳ ngôn ngữ nào củng có quy chuẩn đặt tên biến và class. Trong Ruby sẽ có 1 số quy ước như sau:

  • Tên file, thư mục, biến và phương thức chúng ta nên sử dụng dạng snake_case. Ví dụ: groups_users, teams_users, projects_users
  • Tên class và module ta sử dụng dạng CamelCase. Ví dụ: ProjectsUser, GroupsUser, TeamsUser

Ngoại lệ, đối với tên hằng ta phải viết hoa toàn bộ, và có thể cách nhau bởi dấu gạch dưới (cái này gọi là SCREAMING_SNAKE_CASE)

Lưu ý: Chúng ta nên sử dụng tiếng anh để đặt tên, đối với những từ viết tắt như HTTP, RFC, XML thì viết hoa

Đặt tên là để gợi nhớ, ví dụ khi gọi đến tên của bạn là người ta biết ngay đó là bạn mà không nhầm sang người khác, đặt tên trong lập trình cũng vậy cần phải tường minh.

Có một số bạn đặt tên các biến rất lạc quan, ví dụ: @blablabla, @oh_yeah_oh_fuck, @hahhahaa… vãi cả nón, khi đọc code chắc bị ngộ độc tên biến, không thể hiểu được các biến này dùng làm gì, đặc biệt hơn nữa là khi xử lý qua lại đánh tên các biến này khó vãi, chắc phải copy cho chắc ăn. =))

4. Kết luận

Trong bài này mình đã giới thiệu các bạn cách tạo Module, sử dụng module và các loại biến trong Ruby. Và thông thường thì mình sử dụng module để nhóm các phương thức cùng thực hiện 1 chức năng gì đó lại với nhau.

Đối với biến thì các bạn nên sử dụng 3 loại biến chính là biến local, biến instance và hằng số; 2 biến còn lại củng rất ít khi dùng. Về các quy tắc hay gọi là convention thì mình sẽ có riêng 1 bài cụ thể đi sâu hơn. Qua bài sau mình sẽ nói về câu điều kiện, vòng lặp và một số toán tử.

Cùng chuyên mục:

Block trong Ruby

Block trong Ruby

Block là một khối lệnh được đặt trong ...

Iterator trong Ruby

Iterator trong Ruby

Ở bài trước mình có nói với các bạn về việc sử dụng các vòng…

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Khi học một ngôn ngữ lập trình thì không thể không tìm hiểu tới một…

Câu lệnh điều kiện trong Ruby

Câu lệnh điều kiện trong Ruby

Trong bài này chúng ta sẽ học các lệnh điều kiện trong Ruby, đây là…

Các toán tử trong Ruby

Các toán tử trong Ruby

Nói đến toán tử thì dù bạn học ngôn ngữ nào đi nữa thì việc…

Cách sử dụng Ranges trong Ruby

Cách sử dụng Ranges trong Ruby

Ví dụ bạn cần tạo ra một dãy từ 1 đến 100 thì có thể…

Cách sử dụng Array trong Ruby

Cách sử dụng Array trong Ruby

Đây cũng là một trong những kiểu dữ liệu phổ biến nhất, vì vậy bạn…

Kiểu dữ liệu Symbol trong Ruby

Kiểu dữ liệu Symbol trong Ruby

Symbol giống như một String thế nhưng Symbol là một chuỗi bất biến nghĩa là…

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Boolean là kiểu dữ liệu rất quan trọng, nó được dùng rất nhiều trong những…

Kiểu dữ liệu Hashes trong Ruby: Hiểu từ đơn giản đến phức tạp

Kiểu dữ liệu Hashes trong Ruby: Hiểu từ đơn giản đến phức tạp

Nếu bạn đã từng làm việc với một vài ngôn ngữ khác trước khi mà…

Hiểu về Method Missing trong Ruby

Hiểu về Method Missing trong Ruby

Chắc hẳn với các lập trình viên chúng ta ai cũng có thể đôi lần…

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Trước tiên, chúng ta cùng nhìn qua một bức ảnh tổng quát phân cấp các…

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Từ những năm 2008, thời mà mình còn học đại học thì Ruby là ngôn…

Cách tạo Method - Class và Object trong Ruby

Cách tạo Method - Class và Object trong Ruby

Trong bài này mình sẽ hướng dẫn các bạn cách tạo hàm, gọi hàm. Cách…

Cú pháp trong Ruby - Chạy Hello World

Cú pháp trong Ruby - Chạy Hello World

Tổng quan về cú pháp trong ruby. Hướng dẫn tạo file và chạy hello world…

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn chi tiết cách thiết lập môi trường lập trình Ruby trên hệ điều…

Top