Tải bản đầy đủ (.docx) (105 trang)

Khóa luận Website Bán hàng Full

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.49 MB, 105 trang )

ĐẠI HỌC HUẾ
ĐẠI HỌC KHOA HỌC HUẾ
KHOA CÔNG NGHỆ THÔNG TIN

KHĨA LUẬN TỐT NGHIỆP
TÌM HIỂU RUBY ON RAILS VÀ ỨNG DỤNG

NGUYỄN VĂN QUẢNG

Niên khóa: 2016-2020


ĐẠI HỌC HUẾ
ĐẠI HỌC KHOA HỌC HUẾ
KHOA CÔNG NGHỆ THÔNG TIN

KHĨA LUẬN TỐT NGHIỆP
TÌM HIỂU RUBY ON RAILS VÀ ỨNG DỤNG

Sinh viên thực hiện:

Nguyễn Văn Quảng

Lớp:

TINK40C – Hệ chính quy

Giảng viên hướng dẫn:

TS. Nguyễn Hoàng Hà


Huế, 06 - 2020


LỜI CẢM ƠN
Trong quá trình làm đồ án vừa qua vì được sự chỉ dẫn nhiệt tình của
thầy TS. Nguyễn Hoàng Hà – Trường Đại học Khoa học Huế , em đã hồn
thành đồ án của mình. Mặc dù em đã cố gắng với sự tận tâm của thầy, nhưng
vì thời gian và khả năng nên đồ án của em vẫn cịn khơng tránh được những
điều thiếu sót.
Em xin chân thành và bày tỏ lòng biết ơn sâu sắc đến thầy Nguyễn
Hồng Hà vì đã tận tình chỉ bảo, hướng dẫn và giành thời gian quý báu của
mình cho em trong thời gian qua để em có thể hồn thành đồ án của mình
đúng thời hạn.
Em xin cảm ơn tất cả thầy cô giáo trong khoa Công nghệ thông tin vì
đã truyền đạt cho e m rất các kiến thức nền tảng, chun ngành, chun mơn
và chun sâu cực kì vững chắc trong những năm qua để em có thể hoàn
thanh được đồ án này.
Em xin cảm ơn Trường Đại Học khoa học huế vì khơng ngừng hỗ trợ
và tạo những điều kiện tốt nhất trong nhữ ng năm vừa qua để em có thể học
và thực hiện tốt đồ án. Em xin cảm ơn gia đình, bạn bè đã hỗ trợ và cổ vũ cho
em trong suốt quá trình học tập cũng như làm đồ án để em có thể hồn thành
khóa học và đồ án theo quy định. Em xin chân thành cảm ơn !
Thừa Thiên Huế, ngày 20 tháng 6 năm 2020
Sinh viên
.....

1


MỤC LỤC

LỜI CẢM ƠN..........................................................................................................i
MỤC LỤC..............................................................................................................ii
DANH MỤC HÌNH VẼ.......................................................................................viii
DANH MỤC BẢNG BIỂU....................................................................................xi
LỜI GIỚI THIỆU....................................................................................................1
CHƯƠNG 1: GIỚI THIỆU VỀ NGÔN NGỮ RUBY.............................................2
1.1. Lịch sử phát triển............................................................................................2
1.2. Ruby là gì?......................................................................................................2
1.3. Ruby có thể làm được những gì?....................................................................3
1.4. So sánh một số ngơn ngữ lập trình khác.........................................................3
1.4.1. Ruby với Java..........................................................................................3
a. Điểm giống nhau........................................................................................3
b. Điểm khác nhau.........................................................................................4
1.4.2. Ruby với C++..........................................................................................4
a. Điểm giống nhau........................................................................................4
b. Điểm khác nhau.........................................................................................4
1.5. Ưu và nhược điểm..........................................................................................5
1.5.1. Ưu điểm...................................................................................................5
1.5.2. Nhược điểm.............................................................................................6
1.6. Hướng đối tượng trong Ruby..........................................................................6
1.6.1. Biến.........................................................................................................6
a. Biến global.................................................................................................7
b. Biến class...................................................................................................8
c. Biến local...................................................................................................9
d. Biến constant.............................................................................................9
e. Biến instance..............................................................................................9
1.6.2. Vòng lặp trong Ruby...............................................................................9
a. Vòng lặp while...........................................................................................9
b. Vòng lặp until..........................................................................................10
c. Vòng lặp for.............................................................................................10


2


d. Điều hướng lặp với break, next................................................................11
 Lệnh break............................................................................................11
 Lệnh next..............................................................................................11
 Lệnh retry..............................................................................................11
 Lệnh redo..............................................................................................12
e. Vòng lặp do..............................................................................................12
f. Vòng lặp each...........................................................................................12
1.6.3. Cấu trúc rẽ nhánh if unless case trong Ruby..........................................13
a. Câu lệnh if trong ruby..............................................................................13
b. Câu lệnh if ... else, elseif trong ruby........................................................13
c. Câu lệnh unless........................................................................................15
d. Câu lệnh case with...................................................................................16
1.6.4. Mảng trong Ruby...................................................................................18
a. Kiểu phần tử trong mảng, thêm bớt phần tử mảng...................................18
b. Lấy ra nhiều phần tử mảng......................................................................19
c. Kết hợp mảng...........................................................................................20
d. Phép toán giao hai mảng &......................................................................20
e. Phép toán hợp hai mảng |.........................................................................21
f. Đảo thứ tự mảng.......................................................................................21
g. Các phương thức trong mảng...................................................................21
h. Duyệt các phần tử mảng..........................................................................22
 Duyệt qua các phần tử mảng bằng lệnh for...........................................22
 Duyệt qua các phần tử bằng phương thức each.....................................22
 Duyệt qua các chỉ số phần tử bằng phương thức each_index................23
 Mảng nhiều chiều - mảng trong mảng..................................................23
1.6.5. Class trong Ruby...................................................................................24

a. Phương thức khởi tạo...............................................................................24
b. Tạo đối tượng..........................................................................................24
c. Biến instance trong lớp............................................................................25
d. Phương thức instance trong lớp...............................................................26
e. Phương thức getter/setter.........................................................................27
f. Phương thức lớp, biến lớp, hằng số trong lớp...........................................28
 Phương thức lớp....................................................................................28

3


 Biến lớp................................................................................................28
 Hằng số trong lớp..................................................................................29
1.6.6. Struct trong Ruby...................................................................................29
a. Struct........................................................................................................29
b. OStruct trong Ruby..................................................................................30
1.6.7. Kế thừa và tính đa hình..........................................................................31
a. Tính kế thừa các lớp Ruby.......................................................................31
b. Gọi lại phương thức lớp cha khi nạp chồng.............................................32
c. Quá tải toán tử..........................................................................................34
d. Khả năng truy cập....................................................................................35
 public....................................................................................................35
 private...................................................................................................35
 protected...............................................................................................36
1.7. Ruby IDE và editor hỗ trợ............................................................................36
1.7.1. SciTE.....................................................................................................36
1.7.2. RDE.......................................................................................................36
1.7.3. jEdit.......................................................................................................37
1.7.4. RadRails................................................................................................37
1.7.5. RubyMine..............................................................................................38

CHƯƠNG 2: RAILS FRAMEWORK...................................................................39
2.1. Giới thiệu......................................................................................................39
2.1.1. Lịch sử phát triển...................................................................................39
2.1.2. Ruby on Rails là gì?...............................................................................39
2.1.3. Các tính năng chính của Ruby on Rails.................................................40
2.2. Kiến trúc Model-View-Controller (MVC)....................................................41
2.2.1. Models...................................................................................................41
2.2.2. Views.....................................................................................................41
2.2.3. Controllers.............................................................................................42
2.3. Các thành phần của Rails..............................................................................42
2.3.1. Action Pack............................................................................................42
a. Action Controller.....................................................................................42
b. Action View.............................................................................................42
c. Action Dispatch........................................................................................42

4


2.3.2. Action Mailer.........................................................................................42
2.3.3. Active Model.........................................................................................43
2.3.4. Active Record........................................................................................43
2.3.5. Active Resource.....................................................................................43
2.3.6. Active Support.......................................................................................43
2.3.7. Railties...................................................................................................43
2.4. Tạo mới một project Rails............................................................................43
2.4.1. Cài đặt Ruby và Ruby On Rails Trên Ubuntu........................................43
2.4.2. Tạo Rails Project....................................................................................45
a. Rails Project.............................................................................................45
b. Chạy rails website....................................................................................47
CHƯƠNG 3: PHÂN TÍCH, THIẾT KẾ VÀ CÀI ĐẶT.........................................50

3.1. Đặc tả và thiết kế hệ thống............................................................................50
3.1.1. Đặt vấn đề..............................................................................................50
3.1.2. Đặc tả yêu cầu bài toán..........................................................................50
3.1.3. Cơ chế hoạt động...................................................................................51
3.1.4. Yêu cầu sản phẩm..................................................................................51
3.2. Phân tích và thiết kế hế thống.......................................................................52
3.2.1. Phân tích hệ thống.................................................................................52
a. Biểu đồ Use Case chính ........................................................................52
b. Đổi mật khẩu...........................................................................................52
c. Quản lý Datacenter..................................................................................53
d. Quản lý Host............................................................................................53
e. Quản lý Note............................................................................................54
f. Quản lý Email Template...........................................................................54
g. Tự động lấy thông tin của Host ............................................................55
h. Tự động gửi email cho quản trị viên........................................................55
3.2.2. Biểu đồ lớp............................................................................................56
3.2.3. Biểu đồ hoạt động..................................................................................57
a. Đổi mật khẩu............................................................................................57
b. Quản lý Datacenter..................................................................................57
c. Quản lý Host............................................................................................58
d. Quản lý Note............................................................................................58
e. Quản lý EmailTemplate ..........................................................................59

5


f. Tự động lấy thông tin của Hos.................................................................59
g. Tự động gửi email cho quản trị viên........................................................60
3.2.4. Biểu đồ tuần tự......................................................................................61
a. Đổi mật khẩu............................................................................................61

b. Quản lý Datacenter..................................................................................62
c. Quản lý Host............................................................................................63
d. Quản lý Note............................................................................................64
e. Quản lý EmailTemplate...........................................................................65
f. Tự động lấy thông tin của Host .............................................................66
g. Tự động gửi email cho quản trị viên........................................................66
3.2.5. Thiết kế cơ sở dữ liệu............................................................................67
3.3. Các cài đặt để phát triển hệ thống.................................................................71
3.3.1. Các công nghệ sử dụng..........................................................................71
3.3.2. Cơ sở dữ liệu..........................................................................................72
3.3.3. Các thư viện...........................................................................................72
3.3.4. Các công cụ hỗ trợ.................................................................................72
3.3.5. Giao diện...............................................................................................73
a. Giao diện đăng nhập................................................................................73
b. Đổi mật khẩu...........................................................................................74
c. Trang chủ.................................................................................................75
d. Quản lý Datacenter..................................................................................76
 Thống kê...............................................................................................76
 Tạo mới Datacenter...............................................................................76
 Sửa Datacenter......................................................................................77
 Xem chi tiết Datacenter........................................................................77
e. Quản lý Host............................................................................................78
 Thống kê host.......................................................................................78
 Tạo mới Host........................................................................................79
 Xem chi tiết của Host............................................................................80
f. Quản Lý EmailTemplate...........................................................................83
 Thống kê...............................................................................................83
 Thêm mới EmailTemplate.....................................................................83
g. Hiển thi chi tiết EmailTemplate...............................................................84


6


h. Quản Lý All Note....................................................................................84
 Tạo mới note.........................................................................................84
 Liệt kê tất cả note..................................................................................84
i. Xem Report Multi Host............................................................................86
KẾT LUẬN HƯỚNG PHÁT TRIỂN ĐỀ TÀI......................................................87
1. Kết luận...........................................................................................................87
2. Hướng phát triển..............................................................................................87
TÀI LIỆU THAM KHẢO.....................................................................................89

7


DANH MỤC HÌNH VẼ
Hình 1: Kiến trúc MVC.....................................................................................4
Hình 2: Lệnh cài đặt cURL và gnupg2..............................................................7
Hình 3: Lệnh cài đặt RVM................................................................................7
Hình 4: Lệnh require RVM................................................................................7
Hình 5: Lệnh danh sách RVM...........................................................................8
Hình 6: Lệnh cài đặt RVM................................................................................8
Hình 7: Lệnh cài đặt Rails.................................................................................8
Hình 8: Lệnh kiểm tra version...........................................................................8
Hình 9: Lệnh tạo mới project............................................................................9
Hình 10: Lệnh khởi động server......................................................................11
Hình 11: Lệnh tạo controller............................................................................11
Hình 12: Lệnh tạo model.................................................................................11
Hình 13: Lệnh tạo router.................................................................................12
Hình 14: Sơ đồ usecase tổng quan..................................................................52

Hình 15: Sơ đồ usecase đổi mật khẩu.............................................................52
Hình 16: Sơ đồ usecase quản lý datacenter.....................................................53
Hình 17: Sơ đồ usecase quản lý host...............................................................53
Hình 18: Sơ đồ usecase quản lý note...............................................................54
Hình 19: Sơ đồ usecase quản lý email template..............................................54
Hình 20: Sơ đồ usecase tự động lấy thông tin của Host..................................55

8


Hình 21: Sơ đồ usecase tự động gửi email cho quản trị viên..........................55
Hình 22: Biểu đồ lớp......................................................................................56
Hình 23: Biểu đồ hoạt động đổi mật khẩu......................................................57
Hình 24: Biểu đồ hoạt động quản lý Datacenter...........................................57
Hình 25: Biểu đồ hoạt động quản lý Host......................................................58
Hình 26: Biểu đồ hoạt động quản lý Note......................................................58
Hình 27: Biểu đồ hoạt động quản lý EmailTemplate.....................................59
Hình 28: Biểu đồ hoạt động tự động lấy thơng tin của Host...........................59
Hình 29: Biểu đồ hoạt động tự động gửi email cho quản trị viên...................60
Hình 30: Biểu đồ tuần tự đổi mật khẩu...........................................................61
Hình 31: Biểu đồ tuần tự quản lý Datacenter..................................................62
Hình 32: Biểu đồ tuần tự quản lý Host............................................................63
Hình 33: Biểu đồ tuần tự quản lý Note............................................................64
Hình 34: Biểu đồ tuần tự quản lý EmailTemplate...........................................65
Hình 35: Biểu đồ tuần tự Tự động lấy thơng tin của Host..............................66
Hình 36: Biểu đồ tuần tự Tự động gửi email cho quản trị viên.......................66
Hình 37: Sơ đồ cơ sở dữ liệu...........................................................................71
Hình 38: Giao diện đăng nhập.........................................................................73
Hình 39: Giao diện trang chủ..........................................................................74
Hình 40: Giao diện thống kê datacenter..........................................................75

Hình 41: Giao diện tạo mới datacenter............................................................76
Hình 42: Giao diện chỉnh sửa datacenter........................................................77
Hình 43: Giao diện xem chi tiết datacenter.....................................................78

9


Hình 44: Giao diện thống kê Host...................................................................78
Hình 45: Giao diện tạo mới Host....................................................................79
Hình 46: Giao diện xem chi tiết Host..............................................................80
Hình 47: Giao diện xem chi tiết Host tab detail..............................................81
Hình 48: Giao diện xem chi tiết Host tab history............................................82
Hình 49: Giao diện xem chi tiết Host tab notes...............................................82
Hình 50: Giao diện thống kê EmailTemplate..................................................83
Hình 51: Giao diện thêm mới EmailTemplate.................................................83
Hình 52: Giao diện xem chi tiết EmailTemplate.............................................84
Hình 53: Giao diện tạo mới note.....................................................................84
Hình 54: Giao diện thống kê tất cả note..........................................................85
Hình 55: Giao diện report multi host...............................................................86

10


DANH MỤC BẢNG BIỂU
Bảng 1: Các thư mục của một project rails.....................................................10
Bảng 2: Các loại biến trong ruby.....................................................................18
Bảng 3: Các loại biến global có sẳn trong ruby..............................................19
Bảng 4: Bảng User.........................................................................................67
Bảng 5: Bảng Host.........................................................................................68
Bảng 6: Bảng Datacenter................................................................................69

Bảng 7: Bảng HostReport...............................................................................70
Bảng 8: Bảng Note.........................................................................................70
Bảng 9: Bảng EmailTemplate.........................................................................71

11


LỜI GIỚI THIỆU
1. Lý do chọn đề tài
Trong xu thế công nghệ thông tin đang trên đà phát triển vô cùng mạnh
mẽ. Thông tin được trao đổi qua khắp thế giới, trong đó website là một trong
những cơng nghệ ngày càng rất phát triển. Theo khảo sát của công ty kiểm
sốt thị trường Netcraft. Ngày nay, có hơn 1,7 tỷ trang websites trên toàn thế
giới (Internet Live Stats, 2019) và số lượng ngày càng tăng. Bên cạnh đó,
cơng nghệ web cũng đang dần thay đổi, xu hướng web 2.0 đang dần chiếm vị
trí. Tốc độ cũng như địi hỏi Điều này địi hỏi cần có những framework mới
đáp ứng được nhu cầu về công nghệ cũng như đáp ứng được xã hội thơng tin.
Đã có rất nhiều các framework ra đời để hỗ trợ việc phát triển ứng dụng
website như Zend, Lavarel cho ngôn ngữ PHP, Struts và Spring cho Java...
Nhưng trong vài năm gần đây, một framework mới ra đời đã nhanh chóng nổi
lên và cạnh tranh lại với các framework trên và đơi khi cịn có những đánh
giá là vượt trội hơn, đó là Ruby on Rails.
TÌM TRÊN MẠNG BẢNG THÔNG KÊ VỀ CÁC ỨNG DỤNG VIẾT
BẰNG RUBY ON RAILS
CÁC ƯU ĐIÊM CHÍNH CỦA RUBY ON RAILS
Xuất phát từ nhu cầu thực tế, tơi chọn đề tài: “TÌM HIỂU RUBY ON
RAILS VÀ ỨNG DỤNG”. Mục tiêu của Khóa luận là tìm hiểu tổng quan về
Ruby on Rails và ứng dụng FrameWork này vào một ứng dụng website.
GIỚI THIỆU VẮN TẮT VỀ WEBSITE CỦA MÌNH LÀM GÌ
2. Bố cục của Khóa luận

Khóa luận được chia thành 3 Chương:
Chương 1: đưa tiêu đề và vắn tắt nội dung
....

1


CHƯƠNG 1: GIỚI THIỆU VỀ NGÔN NGỮ RUBY
1.1. Lịch sử phát triển
Ruby được tạo ra bởi Yukihiro Matsumoto (hay còn được gọi là Matz),người
Nhật Bản, vào ngày 24 tháng 2, 1993 và đưa ra bản chính thức vào năm 1995.

Ruby chịu nhiều ảnh hưởng từ Perl, và khi hoàn tất ngôn ngữ này, Matz đã
đùa với một người bạn rằng nên đặt tên thế nào nghe cho nó giống một thứ đá
quý nào đó (Perl lúc đầu cũng được đặt tên là Pearl - ngọc trai). Và bạn của
anh đã gợi ý cái tên Ruby. Sau này Matz cũng bất ngờ khi phát hiện ra Pearl
là viên đá quý tượng trưng cho những ngườisinh tháng 6, cịn Ruby thì tượng
trưng cho những người sinh tháng 7. Anh cho rằng cái tên Ruby như thế là
phù hợp vì Ruby kế thừa và phát triển nhiều đặc tính từ Perl.
Hiện phiên bản mới nhất và ổn định của Ruby là 2.7.0
1.2. Ruby là gì?
Hiện nay, có nhiều ngơn ngữ lập trình để các lập trình viên có thể chọn lựa.
Đối với các lập trình viên mới vào nghề, việc chọn một ngơn ngữ có thể gặp
khó khăn. Có nhiều ngơnngữ đang phát triển, nhưng khơng phổ biến và khó
để tự học một cách thơng thường. Trong số đó, Ruby là một ngơn ngữ rất hay
mà các lập trình viên mới có thể thử.
Ruby là một mã nguồn mở, một ngôn ngữ lập trình hướng đối tượng thuần
túy, nghĩa là, mỗi giá trị bao gồm: số, giá trị true và false,... đều là một đối
tượng .
Ruby được thiết kế tập trung vào tính đơn giản và hiệu suất.

Ruby lấy cảm hứng từ Lisp, Perl, Smalltalk. Mặc dù là ngôn ngữ hướng đối
tượng nhưng Ruby cũng có thể được sử dụng các kiểu lập trình thủ
tục(procedure) và chức năng(functional).

2


1.3. Ruby có thể làm được những gì?
Ruby đã tạo nên những nét đặc biệt nhất của những ngôn ngữ lập trình.
Những nét chính đó là:
 Sức mạnh: là sự kết hợp hoàn hảo giữa sức mạnh hướng đối tượng thuần
túy của ngôn ngữ hướng đối tượng với sức diễn đạt và sự tiện lợi của
ngôn ngữ kịch bản(Script) của Perl. Chương trình Ruby rất nhỏ gọn, dễ
đọc.
 Tính đơn giản : Cú pháp và nghĩa của nó rất trực quan và dễ đọc (clean).
Và cũngkhơng có “những trường hợp đặc biệt” nào mà ta cần phải ghi
nhớ. Như các instance, số nguyên (integer), hay các lớp (classes), vừa đủ
giống vối các ngôn ngữ khác. Mỗi khi ta học những cái cơ bản, nó rất dễ
dàng để đốn trước được cách làm những cái mới hơn.
 Tính vơ hình:Ruby giải phóng người lập trình khỏi sự cực nhọc trong
việc nhồi nhét của các trình biên dịch (complier). Ruby ln nằm trong
‘vùng kiểm sốt’ ,do đó ta có thể tập trung giải quyết các lỗi bằng tay.
 Sẵn có: Ruby là nguồn mở nên có thể sử dụng một cách tự do đối với
người dùng hay người phát triển. Không giống như nhiều ngôn ngữ mới
khác, Ruby không giới hạn bạn về vấn đề HĐH và pháp lý . Ruby có thể
chạy trên Unix hay Linux, Microsoft Windows,….
1.4. So sánh một số ngơn ngữ lập trình khác
1.4.1. Ruby với Java
a. Điểm giống nhau
Giống như Java, Ruby cũng có:

 Bộ nhớ được quản lý thông qua bộ thu dọn rác (garbage collector).
 Đối tượng là chủ đạo.
 Đều có những method public, private, protected.

3


b. Điểm khác nhau
Không giống như Java, trong Ruby:
 Không cần biên dịch code, ta có thể chạy trực tiếp.
 Sử dụng từ khóa “end” sau khi định nghĩa một cái gì đó, ví dụ như
class, thay vì đặt dấu ngoặc quanh khối lệnh.
 Sử dụng “require” thay vì “import” ở Java.
 Tất cả các biến thành viên là private. Từ bên ngồi, ta có thể truy xuất
mọi thứ qua các method.
 Mọi thứ đều là đối tượng, bao gồm cả số, ví dụ như 5 và 3.14.
 Tên biến chỉ là một cái nhãn, không một kiểu đi kèm với nó.
 Contructor ln ln có tên là “initialize” thay vì có tên của class.
 == và equals() xử lý khác nhau trong Ruby. Sử dụng == khi ta muốn
kiểm tra sự tương đương trong Ruby (với Java là equal()). Sử dụng
equal?() khi ta muốn biết hai đối tượng có như nhau hay hông (với
Java là ==).
1.4.2. Ruby với C++
a. Điểm giống nhau
Giống như C++, Ruby cũng:
 Đều có những method public, private, protected.
 Cú pháp kế thừa (inheritance) chỉ có một ký tự (nhưng với Ruby là
“<” và C++ là“:”)
 Exception làm việc theo cách giống nhau.
b. Điểm khác nhau

Không giống như C++, trong Ruby:

4


 Contructor ln ln có tên là “initialize” thay vì có tên của class.
 Tất cả method ln là ảo.
 Biến của class bắt đầu với @@
 Không truy xuất trực tiếp vào các biến thành viên, mà phải thông qua
method.
 Một số method kết thúc với dấu “?”, “!”. Nó thực sự là một phần tên
method.
 Chỉ có hai kiểu chứa là : “Array” và “Hash”
1.5. Ưu và nhược điểm
1.5.1. Ưu điểm
 Công cụ: Rails cung cấp cho ta công cụ tuyệt vời giúp chúng ta triển
khải được nhiều tính năng hơn mà lại tốn ít thời gian hơn. Nó cung cấp
cho ta một cấu trúc chuẩn cho ứng dụng web.
 Thư viện: Rails cung cấp cho ta gem, thứ có thẻ thay thế hầu hết cho
mọi thứ mà bạn có thể nghĩ ra được. Hơn nữa, tất cả gem đều có thể sử
dụng một cách hồn tồn miền phí và có thể dễ dàng tra cứu tại .
 Chất lượng code: Nhìn chung, mình nhận thấy rằng chất lượng của các
phần mềm hỗ trợ Ruby code là cao hơn so với một số ngôn ngữ khác.
 Cộng đồng: Cộng đồng Ruby rất lớn. Mình tin rằng điều này giúp cải
thiện những sản phẩm của Ruby rất nhiều và đây cũng là một lý do mà
thư viện của Ruby lại tuyệt vời như vậy. Ruby cũng là một trong số
những ngơn ngữ lập trình phổ biến nhất trên Github.
 Hiệu suất: RoR là một ngôn ngữ gọn gàng, khi mà sử dụng kết hợp
cùng các thư viện hỗ trợ, RoR cho phép bạn phát triển một cách khá là
nhanh chóng.


5


 Tương lai: RoR có thể được xem là ngơn ngữ được lựa chọn trong các
trang học lập trình trực tuyến phổ biến như , . Điều này có nghĩa là số
lượng lập trình viên tài giỏi tham gia vào cộng đồng Ruby sẽ tăng lên
trong các năm tới.
1.5.2. Nhược điểm
 Thời gian chạy: Phần lớn những cuộc tranh luận về Rail đều có những ý
kiến răng Rails chậm. Điều này hồn tồn đúng, so với NodeJS hay
GoLang, Rails có tốc độ chạy khá chậm. Mặc dù trong thực thế, hiệu
suất của ứng dụng Rails rất khó làm chậm lại việc kinh doanh, Vấn đề
thường nằm ở việc thiết kế server, thậm chí là cả cơ sở dữ liệu.
 Tốc độ boot: Vấn đề chính gây khó chịu khi làm việc với Rails là tốc độ
boot của Rails framework. Phụ thuộc vào số lượng gem và file, chúng ta
có thể mất một khoảng thời gian kha khá để khởi động, điều này có thể
ảnh hưởng trực tiếp tới hiệu suất làm việc. Với việc Spring ra đời, tốc độ
boot đã được cải thiện nhưng có vẻ như nó vẫn cịn có thể nhanh hơn
nữa.
1.6. Hướng đối tượng trong Ruby
1.6.1. Biến
Ta có các loại biến sau đây.
Kí tự bắt đầu

Type

$

Biến global (global variable)


@

Biến instance (instance variable)

[a-z] or _

Biến local (local variable)

[A-Z]

Biến constant (constant variable)

@@

Biến class (class variable)

6


Bảng 1: Các loại biến trong ruby
a. Biến global
Là biến được định nghĩa bắt đầu bằng dấu $, thấy $ là thấy quyến lực rồi.
Nên nó có được gọi ở bất cứ chỗ nào trong chương trình của chúng ta. Cần cân
nhắc khi dùng biến global vì nó có thể gọi được ở mọi nơi và chỉnh sửa ở bất
kì chỗ nào. Nên rất nguy hiểm. Khó debug.
Ngồi ra, có 1 số biến global mà có sẵn trong Ruby nên biết
Biến
$@


Ý nghĩa
Vị trí của error cuối cùng xảy ra
The location of latest error

$_

Chuối string cuối cùng đọc từ hàm gets
The string last read by gets

$.

Số line từ lần cuối đọc từ interpreter
The line number last read by interpreter

$&

Chuỗi string cuối cùng match với regular expression
The string last matched by regexp

$~

Trả về kết quả expression cuối cùng, gồm luôn kết quả của sub
expression
The last regexp match, as an array of subexpressions

$n

Trả về kết quả của sub expression xác định trong kết quả trước
The nth subexpression in the last match (same as $~[n])


$=

Bật tắt chế độ case-insensitive, khơng cịn được support từ version
Ruby 1.9
The case-insensitivity flag

$/

Separator của record input. Default có giá trị là "\n"

7


Biến

Ý nghĩa
The input record separator

$\

Separator của record output. Default có giá trị là nil
The output record separator

$0

Tên của file script đang chạy
The name of the ruby script file currently executing

$*


Các argument của command line khi gọi thực thi script
The command line arguments used to invoke the script

$$

Process ID của interpreter
The Ruby interpreter's process ID

$?

Exit status cuối cùng của process con
The exit status of last executed child process
Bảng 2: Các loại biến global có sẳn trong ruby

b. Biến class
Là biến bắt đầu bằng @@ (2 dấu @ liên tiếp nhau) Biến class thì nó
available trong tất cả các instances của class đó. Có nghĩa là tất cả các object
mà được instantiated từ class đó được sử dụng. Khác với biến global, biến
global tầm vực hoạt động của nó là cả chương trình, cịn biến class thì phạm vị
hoạt động nó nằm trong class.
Ta thấy biến count sử dụng chung cho cả class cha và class con. Khi class
con update thì giá trị ở class cha cũng thay đổi giá trị theo.
c. Biến local
Là biến được định nghĩa ở trong function (method), trong vịng lặp (loop).
Và khơng truy xuất được bên ngồi function hay vịng lặp đó. Biến local
thường bắt đầu bằng chữ cái a-z hoặc dấu _ , tất nhiên là có thế có các ký số

8



d. Biến constant
Là biến bắt đầu bằng 1 chữ cái hoa, chỉ giữ 1 giá trị cố định không thay đổi
trong suốt thời gian chạy chương trình. Cũng vì tính chất đó đơi khi ta bắt gặp
người gọi constant là constant, khơng có gọi là constant variable, vì dù là biến
nhưng nó chả có biến đổi gì.
Nhưng đó là ý nghĩa của biến constant. Cịn trong Ruby thì nó thật sự khơng
như thế, nó có thể bị change value và chỉ kèm theo 1 dòng warning.
e. Biến instance
Giống với biến class, nhưng chỉ khác có chỗ phạm vị avaiable của nó chỉ có
giá trị trong instance object của class. Các biến instance nên được định nghĩa
trong các hàm instance (thường là các hàm khơng kèm theo từ khóa self lúc
khai báo hàm). Sau khi được chạy qua (được khởi tạo) nó có thể sử dụng trong
các hàm instance khác của class đó một cách bình thường.
1.6.2. Vịng lặp trong Ruby
a. Vòng lặp while
Vòng lặp while thực hiện các tác vụ trong một khối lệnh khi điều kiện logic
condition là true, cú pháp như sau:
while condition
# các lệnh trong khối lệnh
Ví dụ tổng các số nguyên từ 0 đến 20
i=0
sum = 0
while i <= 20
sum += i
i += 1

9


end

puts sum
b. Vòng lặp until
Vòng lặp until ngược điều kiện với vòng lặp while, khi điều kiện kiểm tra
là false thì thực hiện khối lệnh
Ví dụ, in ra các số chẵn từ 0 đến 10
a=0
until a > 10
puts "a = #{a}"
a +=2
end
Vòng lặp trên kiểm tra khi a > 10 là sai thì in ra kết quả
c. Vịng lặp for
Vịng lặp for duyệt qua một tập hợp, ví dụ như dải. Mỗi lần lặp có một biến
lưu phần tử hiện tại của tập hợp.
for i in (1..10)
puts i
end
Vòng lặp trên duyệt qua dải số (1..10), mỗi lần lặp tương ứng với một phần
tử trong dải số, và giá trị phần tử lưu vào biến i.
d. Điều hướng lặp với break, next
 Lệnh break
Trong vịng lặp gặp break thì sẽ thốt lặp.

10


for i in 1..50
break if i > 30
puts i
end

Vòng lặp trên sẽ thốt nếu i > 30
 Lệnh next
Trong vịng lặp khi gặp next sẽ chuyển ngay đến lần lặp tiếp theo, bỏ quả
các lệnh sau break của đợt lặp hiện tại
for i in 0..10
next if i %2 == 0
puts i
end
Vịng lặp trên in ra các số lẻ (vì khi gặp các số chẵn nó chuyển ngay đến lần
lặp tiếp theo).
 Lệnh retry
Vịng lặp khi gặp retry nó sẽ tiến hành lặp lại từ đầu.
 Lệnh redo
Vòng lặp gặp redo sẽ lặp lại lần lặp hiện tại.
e. Vòng lặp do
Vòng lặp này chạy khối lệnh cho đến khi gặp break
x=0
loop do
puts x
x += 1

11


break if x > 10
end
f. Vòng lặp each
Mặc dù ở trong các ngơn ngữ khác vịng lặp for được sử dụng rất phổ biến
nhưng trong Ruby each lại được sử dụng phổ biến hơn. Sau đây là ví dụ về sử
dụng each:

(1..5).each do |counter|
puts "Giá trị của counter: #{counter}"
end
Ví dụ trên sử dụng phương thức each có trong kiểu dữ liệu phạm vi 1..5.
Phương thức này sẽ lặp qua từng đơn vị trong phạm vi và gán giá trị lặp này
cho biến counter sau đó in ra màn hình giá trị này.
Vịng lặp each cịn có thể được viết sử dụng cú pháp đơn giản như sau:
(1..5).each {|counter| puts "iteration #{counter}"}
1.6.3. Cấu trúc rẽ nhánh if unless case trong Ruby
a. Câu lệnh if trong ruby
Cú pháp lệnh như sau:
if condition
# các lệnh sẽ thực hiện nếu condition là true
end
Ví dụ:
a=4

12


×