Nhập môn Ruby
Bài đăng này đã không được cập nhật trong 7 năm
Có lẽ đối với những bạn lập trình viên hay người đã từng học IT thì việc hiểu và học 1 ngôn ngữ lập trình là không quá khó khăn, nhưng đối với 1 người mới làm quen với IT như mình thì thật sự để hiểu tại sao khi viết câu lệnh này lại cho ra kết quả như vậy và ghi nhớ cách viết cũng mất khá nhiều thời gian. Mình đang bắt đầu học Ruby, ai cũng nói nó dễ lắm, vậy mà có những chỗ mình vẫn không hiểu . Vì vậy mình đã tìm hiểu bài viết tổng hợp về nhập môn Ruby trên trang Quiita và quyết định dịch lại để ghi nhớ và hy vọng có ích cho bạn nào cũng đang ở tình trạng giống như mình.
Nguồn bài viết: Ruby入門(ドットインストール)
Bắt đầu
Đây là bài tổng hợp các bài về nhập môn Ruby trên trang ドットインストール
Mục lục
- Bang method, method trả về giá trị đúng sai
- Hãy dùng thử kí hiệu %
- Hãy dùng thử if để phân chia điều kiện
- Giá trị đúng sai và toán tử điều kiện
- Hãy dùng thử case để phân chia điều kiện
- Dùng times, while, break, next
- Dùng for, each
- Hãy thử tạo method về hàm số
- Hãy thử tạo class
- Dùng class method và class biến số
- Hãy thử kế thừa class
- Hãy dùng thử accessor
- Hãy dùng thử time class
Nội dung
1. Bang method, method trả về giá trị đúng sai
1.1 Bang method
- Method dùng trong trường hợp muốn viết lại dữ liệu ban đầu
#Thông thường
s = "taguchi"
puts s.upcase
puts s
#Kếtquả
TAGUCHI
taguchi
#Trường hợp dùng bang method
s = "taguchi"
puts s.upcase!
puts s
#Kết quả
TAGUCHI
TAGUCHI
1.2 Method trả về giá trị đúng sai
- Method dùng trong trường hợp muốn trả về giá trị đúng sai ở kết quả
- Giá trị đúng sai của kết quả được dùng trong logical operation và phán đoán điều kiện
s = "taguchi"
p s.empty?
#Kết quả
false
s = ""
p s.empty?
#Kết quả
true
2. Hãy dùng thử kí hiệu %
Kí hiệu % là gì
- Cách viết khác của string và array
#Cách viết thông thường
+String
s = "hello"
s = 'hello'
+Array
a = ["a", "b", "c"]
a = ['a', 'b', 'b']
#Cách viết dùng kí hiệu %
+String
s = %Q(hello)
s = %q(hello)
+Array
a = %W(a b c)
a = %w(a b c)
#Có thể dùng bất cứ kí hiệu nào để đóng string như (!, [, {,..)
3. Hãy dùng thử if để phân chia điều kiện
Phân chia điều kiện
#Cách viết thông thường
score = 50
if score > 60
puts "OK!"
elsif score == 60
puts "NG!"
else
puts "SOSO..."
end
#=>SOSO...
#Cách viết giản lược
score = 50
puts "OK!" if score > 40
#=>OK!
4. Giá trị đúng sai và toán tử điều kiện
4.1 Giá trị đúng sai
-
Trường hợp false
false hoặc nil(Oject không tồn tại)
-
Trường hợp true
Các trường hợp còn lại(bao gồm 0, ' ')
#Dùng if để phân chia điều kiện theo giá trị đúng sai
x = 10
if x
puts "True"
end
#Phía trên là phần giản lược của toán tử so sánh phía dưới
if x == true
puts "True"
end
4.2 Toán tử điều kiện
Để viết câu lệnh if else đơn giản hơn
#Câu lệnh if else dựa vào toán tử điều kiện
b, c = 10, 20 #gán nhiều giá trị
a = b > c ? c : b
puts a
Kết quả
20
5. Hãy dùng thử case để phân chia điều kiện
#Phân chia điều kiện bằng câu lệnh case
signal = "red"
case signal
when "red"
puts "STOP!"
when "green", "blue" # Có thể chỉ định nhiều giá trị bằng cách dùng dấu , ngăn cách
puts "GO!"
when "yellow"
puts "CAUTION!"
else
puts "wrong signal"
end
#Kết quả
STOP!
6. Dùng times、while、break、next
#time method
3.times do |i| #Nếu thêm biến số thích hợp vào sau do thì sẽ có được số vòng lặp
puts "#{i}: hello"
end
#Kết quả
0: hello
1: hello
2: hello
#while method
i = 0
while i > 3 do
puts "#{i}: hello"
end
#Kết quả
0: hello
1: hello
2: hello
#times+break
3.times do |i| #Nếu thêm biến số thích hợp vào sau do thì sẽ có được số vòng lặp
if i == 1
break
end
puts "#{i}: hello"
end
#Kết quả
0: hello
#times+next
3.times do |i| # Nếu thêm biến số thích hợp vào sau do thì sẽ có được số vòng lặp
if i == 1
next
end
puts "#{i}: hello"
end
#Kết quả
0: hello
2: hello
7. Dùng for、each
# Câu lệnh for
for i in 0..2
puts i
end
#Kết quả
0
1
2
#Câu lệnh for (Array)
for color in ["red", "blue", "pink"]
puts color
end
#Kết quả
red
blue
pink
#Câu lệnh each(Array)
["red", "blue", "pink"].each do |color|
puts color
end
#Kết quả
red
blue
pink
# Câu lệnh each (hash)
{"apple"=>100, "banana"=>200, "orange"=>50}.each do |fruit, price|
puts "#{fruit}: #{price}"
end
#Kết quả
apple: 100
banana: 200
orange: 50
8. Hãy thử tạo method về hàm số
#Tạo hàm số
def sayHi
puts "Hello"
end
sayHi()
#Kết quả
Hello
#Thêm tham số
def sayHi(name)
puts "Hello" + name
end
sayHi("Tom")
#Kết quả
Hello Tom
#Thiết lập giá trị cố định cho tham số
def sayHi(name = "Steve")
puts "Hello" + name
end
sayHi("Tom")
sayHi()
#Kết quả
Hello Tom
Hello Steve
#Lấy giá trị quay lại
def sayHi(name)
s = "Hello" + name
return s #return có thể lược bỏ
end
greet = sayHi("Tom") #Vì có giá trị quay lại nên có thể gán
puts greet
puts s #Không thể gọi dữ liệu từ ngoài method đã được định nghĩa
#Kết quả
Hello Tom
Error
9. Hãy thử tạo class
Một số thuật ngữ
+Class: Là bản thiết kế object
+Instance :Là object được tạo ra từ class
+Biến số instance : Là biến số bắt đầu bởi @ và có thể gọi ra từ method khác bên trong instance
#Ví dụ1
class User()
def initialize(name)
@name = name
end
def sayHi()
puts "Hello, my name is #{@name}"
end
end
tom = User.new("Tom")
bob = User.new("Bob")
tom.sayHi()
bob.sayHi()
#Kết quả
Hello, my name is Tom
Hello, my name is Bob
10. Dùng class method và biến số class
Một số thuật ngữ
+Instance method : Là method được định nghĩa thông thường trong class
+Class method: Là method có thể được gọi ra trực tiếp từ class
+Biến số class : Là biến số bắt đầu bởi@@ và là biến số có thể gọi ra từ class method
#Class method, biến số class
class User()
@@count = 0 #Biến số class
def initialize(name)
@name = name #Biến số instance
@@count += 1
end
def sayHi() #Instance method
puts "Hello, my name is #{@name}"
end
def User.sayHello #Class method
puts "Hello from User class (#{@@count} users)"
end
end
User.sayHello()
tom = User.new("Tom")
bob = User.new("Bob")
User.sayHello()
#Kết quả
Hello from User class (0 users)
Hello from User class (2 users)
11.Hãy thử kế thừa class
#Kế thừa class
class User()
def initialize(name)
@name = name # Biến số instance
end
def sayHi() # instance method
puts "Hello, my name is #{@name}"
end
end
class SuperUser < User
def shout
puts "HELLO! from #{@name}!"
end
end
tom = User.new("Tom")
bob = SuperUser.new("Bob")
tom.sayHi()
bob.sayHi()
bob.shout()
#Kết quả
Hello, my name is Tom
Hello, my name is Bob
HELLO! from Bob
12. Hãy dùng thử accessor
Một số thuật ngữ Accessor
+Lấy giá trị thiết lập: getter
+Thay đổi thiết lập: setter
@Định nghĩa setter, getter
class User()
def initialize(name)
@name = name # biến số instance
end
# Dùng getter, setter trong trường hợp muốn gọi hay thay đổi biến số instance từ bên ngoài
# getter
def name
@name # return trong return @name có thể lược bỏ
end
# setter
def setName(newName)
@name = newName
end
def sayHi() # instance method
puts "Hello, my name is #{@name}"
end
end
bob = User.new("Bob")
bob.sayHi()
p bob.name
bob.setName("Tom")
bob.sayHi()
#Kết quả
Hello, my name is Bob
"Bob"
Hello, my name is Tom
Có thể viết đơn giản như thế này
#Định nghĩa setter, getter
class User()
def initialize(name)
@name = name # biến số instance
end
# Định nghĩa cả getter, setter
attr_accessor :name
# Chỉ định nghĩa getter
attr_reader :name
# Chỉ định nghĩa setter
attr_writer :name
def sayHi() # instance method
puts "Hello, my name is #{@name}"
end
end
bob = User.new("Bob")
bob.sayHi()
p bob.name
bob.name = "Tom" # Có thể viết như thế này
bob.sayHi()
#Kết quả
Hello, my name is Bob
"Bob"
Hello, my name is Tom
13. Hãy dùng thử time class
#Lấy điểm thời gian hiện tại
t = Time.now
p t
#Kết quả
2016-03-20 13:09:30 +0900
#Chỉ định thời gian và tính toán thời gian
t = Time.new(2016, 3, 20, 13, 09, 30)
p t
t += 10
p t
#Kết quả
2016-03-20 13:09:30 +0900
2016-03-20 13:09:40 +0900
#Thay đổi cách hiển thị
t = Time.new(2016, 3, 20, 13, 09, 30)
p t.strftime("Updated: %Y-%m-%d")
p t
#Kết quả
"Updated: 2016-03-22"
Hy vọng bài tổng hợp này có thể giúp ích được cho bạn nào mới học Ruby như mình!
All rights reserved