Gi i thi u ngôn ng ớ ệ ữ
Ruby
Members:
Phan Duy Toàn
Nguy n Văn N iễ ộ
N i dung chínhộ
I. T ng quan v Rubyổ ề
II. Ruby Advance
III. Demo
2
T ng quan v Rubyổ ề
Yukihiro Matsumoto (Matz)
Sinh ngày: 14 - 04 – 1965
Quốc tịch: Nhật
Nghề nghiệp: Computer scientist,
programmer
3
“Ruby is simple in appearance, but is very complex inside,
just like our human body”
Matz, speaking on the Ruby-Talk mailing list, May 12th, 2000.
T ng quan v Rubyổ ề
Ruby là:
S k t h p thành công c a Smalltalk, Python, Perl. ự ế ợ ủ
Ngôn ng l p trình c p cao.ữ ậ ấ
Đ c thông d ch gi ng Perl, Pythonượ ị ố
H ng đ i t ng gi ng Smalltalk, Javaướ ố ượ ố
Đ c vi t b i Matz năm 1993ượ ế ở
4
T ng quan v Rubyổ ề
M t s đ c tr ng c a Ruby:ộ ố ặ ư ủ
H ng đ i t ng thu n túyướ ố ượ ầ
D h c t p và nghiên c u.ễ ọ ậ ứ
Mã ngu n mồ ở
R t nhi u th vi nấ ề ư ệ
Code ít, l i ítỗ
5
T ng quan v Rubyổ ề
Variables:
$ten_bien: bi n toàn c c, có th s d ng trong các class ế ụ ể ử ụ
khác nhau
@ten_bien: bi n th c th , có th s d ng trong các ế ự ể ể ử ụ
ph ng th c khác nhau c a 1 classươ ứ ủ
@@ten_bien: bi n l p, gi ng bi n staticế ớ ố ế
ten_bien: bi n localế
Pseudo-Variables:
self: gi ng $this trong PHPố
nil: gi ng null trong PHP. ố
…
6
T ng quan v Rubyổ ề
Constant :
Cú pháp:
Tên_h ng = giá_trằ ị
Ví d :ụ
Const = 5
MyConst = ‘my constant’
7
T ng quan v Rubyổ ề
Types
Integer Numbers, Floating Numbers, Boolean
String
String là lớp dùng để thể hiện chuỗi ký tự
string = ‘hello world!’
Ruby Arrays
Cách khai báo
arr = [1, 2, 3]
arr = Array.new
Các d ng:ạ
arr = [1, 2, 3]
arr = [[1,2],[3,4,5,6],[7,8,9]]
subArr = arr[0,2]
8
T ng quan v Rubyổ ề
Ruby Hashes
hsh = { "red" => 0xf00, "green" => 0x0f0 }
for key, value in hsh
puts “#{key} is #{value}”
end
Ruby Ranges
for n in 10 15
puts n
end
9
T ng quan v Rubyổ ề
Operator
S h c: +, -, *, /, %, …ố ọ
So sánh: ==, !=, >, >=, <, <=, …
Gán: =, +=, …
Logic: &&, ||, !, …
10
T ng quan v Rubyổ ề
if else
x=1
if x > 2
puts “x is greater than 2”
elsif x < 2 && x >= 0
puts “x is 0, 1 or 2”
else
puts “x is smaller than 0”
end
11
T ng quan v Rubyổ ề
case
age = 5
case age
when 0 2
puts "baby"
when 3 6
puts “youth”
else
puts “adult”
end
12
T ng quan v Rubyổ ề
while
i = 0
num = 5
while i < num do
puts “i = #i”)
i +=1
end
for
for i in 0 5
puts “i = #{i}”
end
ary = [ "fred", 10, 3.14]
for j in ary
puts “j = #{j}”
end
13
break : thoát kh i vòng l pỏ ặ
next : nh y sang b c l p k ti pả ướ ặ ế ế
T ng quan v Rubyổ ề
Blocks
Trong quá trình sử dụng các cấu trúc liệt kê, chúng ta
thường thấy một nhóm các câu lệnh nằm trong cặp ngoặc
nhọn hoặc trong lòng khối begin/end. Người ta gọi đó là
block. Thông thường block bao giờ cũng được thực hiện
sau lời gọi hàm
Ví d :ụ
10.downto(0){|x| print x}
14
T ng quan v Rubyổ ề
Class
class Hello [< Class]
def initialize( name )
@name = name
end
def salute
puts "Hello #{@name}!"
end
End
# Create a new object
h = Hello.new("Ruby")
# Output "Hello Ruby!"
h.Salute
15
T ng quan v Rubyổ ề
Module
Modules là nhóm các thành phần hàm, biến, hằng số và chạy
độc lập
Ví d :ụ
module MyModule
def MyModule.intro
puts "This is the intro of modul"
end
def MyModule.sayHello
puts "Hello"
end
end
16
T ng quan v Rubyổ ề
M t s framework cho Ruby:ộ ố
Sinatra: Kích th c nhướ ỏ
Padrino: Kích th c trung bìnhướ
Rails: Kích th c l nướ ớ
Ngoài ra, còn nhi u framework khác nh : Camping, ề ư
Cramp, Cuba, Salad…
17
T ng quan v Rubyổ ề
u đi mƯ ể
Cú pháp trong sáng h n.ơ
H ng đ i t ng thu n ướ ố ượ ầ
túy.
Kh năng khai thác văn ả
b n m nhả ạ
Có tính c u trúc và n ấ ổ
đ nh h n.ị ơ
Nh c đi mượ ể
S l ng dòng code l n ố ượ ớ
h n các ngôn ng khác ơ ữ
nh Python, Perl …ư
Là ngôn ng ch y khá ữ ạ
ch m.ậ
18
Ruby Advance
Ruby Object oriented
Ruby là m t ngôn ng l p trình thu n h ng đ i t ng. M i th trong ộ ữ ậ ầ ướ ố ượ ọ ứ
Ruby đ u là Object, t các class cho đ n nh ng th c b n nh t: ề ừ ế ữ ứ ơ ả ấ
strings, number, true và false, M t class b n thân nó là m t ộ ả ộ
Object, đ c k th a t l p ượ ế ừ ừ ớ Class.
Gi ng nh Java, m t class bao g m ố ư ộ ồ attributes và methods
Khai báo class
class <class name>
code
end
Đ nh nghĩa objectị
<object name> = <class name>.new
Constructor Method
def initialize
code
end
19
Ruby Advance
Ruby Object oriented (ti p)ế
Attributes (Instance variables) c a Object là private v i các Object ủ ớ
khác và không th truy c p t bên ngoài c a class. Chúng ch có s n ể ậ ừ ủ ỉ ẵ
đ i v i các object mà đ c k th a.ố ớ ượ ế ừ
Ngoài ra, t bên ngoài class, có th truy c p gián ti p đ n các ừ ể ậ ế ế
attributes thông qua các accessor method và setter method (t ng t ươ ự
các ph ng th c get và set trong java)ươ ứ
class Person
def initialize(n) # initialize method
@name = n
end
def printName # accessor method
@name
end
end
20
Ruby Advance
Ruby Object oriented (ti p)ế
Variables và Method của class: được share giữa các object
class Box
@@count = 0
def initialize(w,h)
@width, @height = w, h
@@count += 1
end
def self.printCount()
puts "Box count is : #@@count"
end
end
box1 = Box.new(10, 20)
box2 = Box.new(30, 100)
Box.printCount()
21
Ruby Advance
Ruby Object oriented (ti p)ế
3 level of access at instance method: private, protected, public. Các
level này không áp d ng đ i v i instance và class variablesụ ố ớ
Inheritance: ch h tr đ n k th a, không h tr đa k th a. Thay ỉ ỗ ợ ơ ế ừ ỗ ợ ế ừ
vào đó Ruby đ a ra khái ni m ư ệ Mixins.
Overriding: các l p con có th thay đ i hành vi c a các method đã ớ ể ổ ủ
đ c đ nh nghĩa s n l p chaượ ị ẵ ở ớ
Overloading: gi ng n p ch ng toán t trong C++ố ạ ồ ử
class Complex
def initialize(r, v)
@real, @virtual = v
end
def +(other)
Complex.new(@real+other.real, @virtual+other.virtual)
end
end
22
Ruby Advance
Ruby Database Access
Các script Ruby t ng tác v i các database thông qua m t ươ ớ ộ
interface đ c l p v i c s d li u đ c cung c p b i ộ ậ ớ ơ ở ữ ệ ượ ấ ở
Ruby DBI module
DBI t o ra m t l p tr u t ng hóa gi a code Ruby và ạ ộ ớ ừ ượ ữ
database n m bên d i. Nó đ nh nghĩa m t t p các ằ ướ ị ộ ậ
method, các variables và các conventions mà cung c p ấ
m t consistence database interface, đ c l p v i database ộ ộ ậ ớ
đang đ c s d ng. Nh v y, l p trình viên có th d ượ ử ụ ờ ậ ậ ể ễ
dàng giao tác v i database mà không c n quan tâm đ n ớ ầ ế
lo i DBMS nào đang đ c s d ng.ạ ượ ử ụ
23
Ruby Advance
DBI Application’s Architecture
24
Ruby
Script
A
P
I
DBI
DBD:Oracle
Postgr
eSQL
RDBMS
MySQL
RDBMS
Oracle
RDBMS
DBD:MySQL
DBD:Postgr
eSQL
DBI layer: đ c l p v i database, cung c p m t t p các ộ ậ ớ ấ ộ ậ
ph ng th c đ giao tác v i databaseươ ứ ể ớ
DBD layer: ph thu c database, cung c p các drivers cho ụ ộ ấ
t ng database t ng ng. M i drivers s thông d ch các ừ ươ ứ ỗ ẽ ị
request t DBI layer và ánh x chúng thành các request ừ ạ
phù h p v i lo i database đang đ c s d ng. ợ ớ ạ ượ ử ụ
Ruby Advance
Sending Mailing
Ruby cung c p class ấ Net::SMTP cài đ t giao th c SMTP ặ ứ
phía client-side
T o SMTP object, và th c hi n k t n i đ n Server thông ạ ự ệ ế ố ế
qua port. M c đ nh server là localhost, port 25ặ ị
Net::SMTP.new (<Server>, <Port>)
Th c hi n k t n i đ n Server, v i account và password ự ệ ế ố ế ớ
v i đ nh d ng cho mã hóa là Authtype. M c đ nh Authtype ớ ị ạ ặ ị
là craim_md5
Net::SMTP.start(<Domain>, <Account>, <Password>,
<Authtype>)
G i mailử
Net::SMTP.sendmail(message, ‘’,
‘’)
25