11A7 VIP
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.


We are the family!!!
 
Trang ChínhTrang Chính  Đăng kýĐăng ký  Tìm kiếmTìm kiếm  Latest imagesLatest images  Đăng NhậpĐăng Nhập  

 

 Ngôn ngữ lập trình Ruby

Go down 
2 posters
Tác giảThông điệp
Admin
Nhóm Điều hành
Nhóm Điều hành
Admin


Tổng số bài gửi : 346
Age : 33
Đến từ : Thiên đàng
Registration date : 22/01/2008

Character sheet
HP:
Ngôn ngữ lập trình Ruby Left_bar_bleue999999999/999999999Ngôn ngữ lập trình Ruby Empty_bar_bleue  (999999999/999999999)
SP:
Ngôn ngữ lập trình Ruby Left_bar_bleue7777777/7777777Ngôn ngữ lập trình Ruby Empty_bar_bleue  (7777777/7777777)

Ngôn ngữ lập trình Ruby Empty
Bài gửiTiêu đề: Ngôn ngữ lập trình Ruby   Ngôn ngữ lập trình Ruby I_icon_minitimeTue Apr 01, 2008 8:38 pm

Ruby (ngôn ngữ lập trình)
Ruby là một ngôn ngữ lập trình hướng đối tượng, có khả năng reflection. Cú pháp bị ảnh hưởng từ Ada và Perl với các đặc tính hướng đối tượng của Smalltalk, và cũng chia sẻ một số đặc tính với Python, Lisp, Dylan và CLU. Ruby là ngôn ngữ thông dịch đơn giai đoạn.
Lịch sử
Ruby được tạo ra bởi Yukihiro "Matz" Matsumoto từ 24 tháng 2, 1993 và đưa ra bản chính thức vào năm 1995.
Ruby được đặt tên theo birthstone (mỗi tháng sinh sẽ tương ứng với một viên đá quí - gọi là birthstone) của một đồng nghiệp. Thực ra, tên này phản ánh sự kế thừa của ngôn ngữ Perl. Pearl(ngọc trai) là một birthstone của Tháng 6 trong khi ruby(hồng ngọc) là birthstone của Tháng 7.
Tháng 9 năm 2005, phiên bản ổn định mới nhất là 1.8.3. Ruby 1.9 (với một số thay đổi) cũng đang trong quá trình phát triển.
Quan điểm
Quan điểm chính trong việc thiết kế của Matz là nhằm giảm thiểu các công việc nhàm chán mà họ, các nhà lập trình, buộc phải làm; tiếp đến là nguyên tắc thiết kế giao diện người dùng(user interface) hiệu quả.Ông nhấn mạnh rằng việc thiết kế hệ thống cần phải tập trung vào con người, hơn là vào máy tính:
Often people, especially computer engineers, focus on the machines. They think, "By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something." They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves.
Ngôn ngữ Ruby được thiết kế nhằm theo nguyên tắc ít gây ngạc nhiên nhất (principle of least surprise-POLS), nghĩa là ngôn ngữ hoạt động theo một cách trực quan hay ít nhất đó cũng là nhận xét mà các nhà lập trình đưa ra. Nguyên tắc này không xuất phát từ Matz và, nói chung, Ruby gần với suy nghĩ ít ngạc nhiên nhất của 'Matz' hơn.
Ngữ nghĩa
Ruby là một ngôn ngữ hướng đối tượng: mỗi bit dữ liệu đều là một đối tượng (object), bao gồm các kiểu dữ liệu mà đối với các ngôn ngữ khác, chúng là kiểu cơ bản (primitive) như integer. Mỗi hàm (function) là một phương thức (method). Tên biến (variables) chính là tham khảo (references) đến các đối tượng, bản thân nó không phải là đối tượng. Ruby hỗ trợ kế thừa (inheritance) với dynamic dispatch, mixin và singleton method (thuộc về, và để định nghĩa cho, một instance đơn hơn là định nghĩa dành cho lớp). Mặc dù Ruby không hỗ trợ đa kế thừa, các lớp vẫn có thể được đưa vào các module dưới dạng các mixins. Cú pháp dạng thủ tục (procedural syntax) vẫn còn được hỗ trợ, có vẻ như là ngoài tầm vực của mọi đối tượng, nhưng thực sự là thuộc một thể hiện của class Object tên là 'main'. Vì class này là cha của mọi class khác, nó trở trên ẩn đối với mọi lớp và đối tượng.
Ruby được xem là một ngôn ngữ lập trình đa mẫu hình (multi-paradigm programming language): nó cho phép bạn lập trình dạng thủ tục (tạo ra các hàm/biến nằm ngoài phạm vi của các lớp và biến chúng thành một phần của đối tượng gốc, 'self' Object), với khả năng hướng đối tượng (mọi thứ đều là đối tượng) hay hàm (nó có các hàm không có tên (anonymous functions), closures, và continuations; mọi câu lệnh đều có giá trị trả về, và các hàm đều trả về kết quả ước lượng cuối cùng). Nó hỗ trợ mạnh cho tự định kiểu (type introspection), reflection và meta-programming.
Theo Ruby FAQ, "Nếu bạn thích Perl, bạn sẽ thích Ruby và sẽ thấy thoải mái với cú pháp của nó. Nếu bạn thích Smalltalk, bạn sẽ thích Ruby và sẽ thấy thoải mái với ngữ nghĩa của nó (semantics). Nếu bạn thích Python, bạn có thể hoặc không thể dừng lại bởi sự khác biệt lớn trong triết lí hiện thực giữa Python và Ruby/Perl."
Hiện thực ngôn ngữ
Ruby có 2 bản hiện thực chính: bộ thông dịch Ruby chính thức, bản được dùng phổ biến nhất, và JRuby, bản hiện thực dựa trên ngôn ngữ Java. Bộ thông dịch Ruby đã được hiện thực trên nhiều platforms khác nhau, bao gồm Unix, Microsoft Windows, DOS, Mac OS X, OS/2, Amiga và một số khác. Bản chính thức của Ruby có kèm theo "IRB", là bộ thông dịch dạng dòng lệnh trực tiếp (interactive command-line interpreter) giúp cho việc kiểm tra code nhanh chóng.
Qui ước Bản quyền
Ruby được phân phối tự do theo đăng kí tự do và mã nguồn mở GPL và Ruby License.
Tính năng
hướng đối tượng
xử lí ngoại lệ
iterator và closures (dựa vào cách truyền một khối lệnh)
native, biểu thức chính qui như Perl ở mức độ ngôn ngữ
chồng toán tử (operator overloading)
thu hồi rác tự động
tính khả chuyển cao (portable)
có thể chạy đa luồng (multi-threading) trên mọi platforms
khả năng nạp động các DLL/thư viện chia sẻ trên hầu hết mọi platforms.
tự kiểm tra (introspection), reflection và meta-programming
rất nhiều thư viện chuẩn
hỗ trợ dependency injection
continuation và generator (xem ví dụ tại RubyGarden: continuations và generators)
dùng khối lệnh (code block)
Ruby hiện tại vẫn chưa hỗ trợ Unicode, dù chỉ mới hỗ trợ tạm thời cho UTF-8.
Một vài điều mới
Mặc dù việc thiết kế Ruby tuân theo nguyên tắc ít gây ngạc nhiên nhất, nhưng một số tính năng khác với các ngôn ngữ khác như C++ hay Perl:
Các tên bắt đầu bằng kí tự hoa được xem là hằng, vì thế biến cục bộ nên bắt đầu bằng kí tự thường.
Việc đánh giá Boolean đối với các dữ liệu không phải bool rất chặt chẽ: 0, "" và [] được xem là true: Trong C, biểu thức 0 ? 1 : 0 được xem là 0. Trong Ruby, tuy nhiên, nó lại trả về 1, vì số 0 được xem là "một cái gì đó"; chỉ có nil và false chỉ mới được xem là bằng false. Một hệ luận đối với qui luật này là theo qui ước, các phương thức của Ruby -- ví dụ, biểu thức chính qui tìm kiếm — sẽ trả về các số, chuỗi, danh sách etc. nếu thành công, nhưng lại trả về nil nếu thất bại (ví dụ, không tìm thấy).
Để biễu diễn một số thực dấu chấm động, ta phải theo qui tắc dùng kí số zero (99.0) hay chuyển đổi tường minh (99.to_f). Việc dùng dấu chấm là không đủ (99.) vì các số vẫn có thể nhận cú pháp có phương thức.
Thiếu một kiểu dữ liệu kí tự ("char"). Điều này có thể gây ngạc nhiên khi duyệt qua chuỗi: "abc"[0] cho ra 97 (một số nguyên, biểu diễn mã ASCII của kí tự đầu tiên trong chuỗi); để lấy được "a" dùng "abc"[0,1] (chuỗi con có chiều dài 1) hay "abc"[0].chr.
Một danh sách các lỗi thường gặp ("gotchas") có thể tra trong cuốn sách của Hal Fulton The Ruby Way, trang 48–64. Tuy nhiên, vì danh sách trong cuốn sách là dựa trên phiên bản cũ của Ruby (version 1.6), một số mục đã được sửa đổi sau khi cuốn sách ấn hành. Ví dụ, retry bây giờ làm việc được với while, until và for, cũng như với iterators.
Về Đầu Trang Go down
http://11a7vip.heavenforum.com
Admin
Nhóm Điều hành
Nhóm Điều hành
Admin


Tổng số bài gửi : 346
Age : 33
Đến từ : Thiên đàng
Registration date : 22/01/2008

Character sheet
HP:
Ngôn ngữ lập trình Ruby Left_bar_bleue999999999/999999999Ngôn ngữ lập trình Ruby Empty_bar_bleue  (999999999/999999999)
SP:
Ngôn ngữ lập trình Ruby Left_bar_bleue7777777/7777777Ngôn ngữ lập trình Ruby Empty_bar_bleue  (7777777/7777777)

Ngôn ngữ lập trình Ruby Empty
Bài gửiTiêu đề: Re: Ngôn ngữ lập trình Ruby   Ngôn ngữ lập trình Ruby I_icon_minitimeTue Apr 01, 2008 8:39 pm

Ví dụ
Lưu ý: các ví dụ sử dụng chuỗi ký tự Unicode để chạy được cần đặt một biến môi trường là $KCODE="u". Hay là chạy #ruby với tùy chọn là -K u cũng OK luôn. Xem thêm những hạn chế của phiên bản Ruby hiện tại với Unicode tại ruby và unicode
Một số ví dụ cơ bản với Ruby :
1. # Mọi thứ, kể cả tầm thường nhất, là một đối tượng. Vì thế những ví dụ dưới đều chạy được:
2. -199.abs # 199 abs: giá trị tuyệt đối
3. "ruby is cool".length # 12
4. "Rick".index("c") # 2
5. "Nice Day Isn't It?".split(//).uniq.sort.join # " '?DINaceinsty"
Collections
Khởi tạo và sử dụng một array:
1. a = [1, 'chào', 3.14, 1, 2, [4, 5]]
2.
3. a[2] # 3.14
4. a.reverse # [[4, 5], 2, 1, 3.14, 'chào', 1]
5. a.flatten.uniq # [1, 'chào', 3.14, 2, 4, 5]
Khởi tạo và sử dụng một hash:
1. hash = {'nước' => 'ướt', 'lửa' => 'nóng'}
2. puts hash['lửa'] # Xuất ra: nóng
3.
4. hash.each_pair do |key, value|
5. puts "#{key} thì #{value}"
6. end
7.
8. # Xuất ra: nước thì ướt
9. # lửa thì nóng
10.
11. hash.delete_if {|key, value| key == 'nước'} # Hủy 'nước' => 'ướt'
Block và iterator
2 cách để tạo một code block:
1. { puts "Hello, World!" }
2. do puts "Hello, World!" end
Block có thể là một tham số (trở thành một closure):
1. def remember(&p)
2. @block = p
3. end
4. # Gọi hàm, cho vào một block lấy vào tên.
5. remember {|ten| puts "Xin chào, " + ten + "!"}
6.
7. # Hãy gọi closure đúng lúc!
8. @block.call("Tèo")
9. # Xuất ra "Xin chào, Tèo!"
Đoạn mã nguồn Ruby tương ứng với đoạn trong bài Python chứng tỏ closure:
1. def foo(initial_value=0)
2. var = initial_value
3. return Proc.new {|x| var = x}, Proc.new { var }
4. end
5.
6. setter, getter = foo
7. setter.call(21)
8. getter.call # => 21
Trong một hàm, có thể thay đổi một block vào lúc gọi hàm:
1. def bfs(e)
2. q = []
3. e.mark
4. yield e
5. q.push e
6. while not q.empty?
7. u = q.shift
8. u.edge_iterator do |v|
9. if not v.marked?
10. v.mark
11. yield v
12. q.push v
13. end
14. end
15. end
16. bfs(e) {|v| puts v}
Duyệt lần lượt trên enumation và array bằng cách dùng block:
1. a = [1, 'chào', 3.14]
2. a.each {|phantu| puts item} # Xuất ra toàn bộ phần tử
3. (3..6).each {|phantu| puts num} # Xuất ra các số từ 3 đến 6
Block cũng có thể dùng với các hàm built-in:
1. File.open('taptin.txt', 'w+b') do |taptin|
2. taptin.puts 'Viết linh tinh gì đó.'
3. end # File được tự động đóng lại tại đây
Hay:
1. IO.readlines('taptin.txt') do |dòng|
2. # Xử lý từng dòng ở đây.
3. end
Sử dụng enumeration và block để xuất ra lũy thừa 2 của các số từ 1 đến 10:
1. (1..10).collect {|x| x*x} => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Lớp
Đoạn mã sau định nghĩa một class tên là Person. Bên cạnh phương thức 'initialize', là hàm tạo dùng để tạo ra đối tượng mới, nó có 2 phương thức khác: một là override toán tử so sánh <=> (vì thế Array#sort có thể sắp xếp theo tuổi) và cái còn lại là override phương thức to_s (vì thế Kernel#puts có thể định dạng dữ liệu ra của nó). Ở đây, "attr_reader" là một ví dụ của meta-programming trong Ruby: "attr" định nghĩa các phương thức dạng 'getter' và 'setter' của instance variables; "attr_reader": các phương thức dạng 'getter'. Và, câu lệnh cuối cùng trong một phương thức (method) là giá trị trả về, cho phép bỏ qua việc chỉ định 'return' một cách tường minh.
1. class Nguoi
2. def initialize(ten, tuoi)
3. @ten, @tuoi = ten, tuoi
4. end
5.
6. def <=>(nguoi)
7. @tuoi <=> nguoi.tuoi
8. end
9.
10. def to_s
11. "#{@ten} (#{@tuoi})"
12. end
13.
14. attr_reader :ten, :tuoi
15. end
16.
17. group = [ Nguoi.new("Tèo", 10),
18. Person.new("Tí", 13),
19. Person.new("Bác Ba", 64)
20. ]
21.
22. puts group.sort.reverse
Đoạn mã trên in ra 2 tên theo tuổi giảm dần:
1. Bác Ba (64)
2. Tí (13)
3. Tèo (10)
Hệ điều hành
Ruby có thể chạy trên các hệ điều hành sau:
Các họ hàng của Unix
DOS
Microsoft Windows 95/98/XP/NT/2000/2003
Mac OS X
BeOS
Amiga
Acorn RISC OS
OS/2
Syllable
Có thể còn thêm một số platform khác.
Chương trình "Hello world"
viết dòng này vào file hello.rb
puts "chao The gioi"
và chạy thử
~>ruby hello.rb
Các ứng dụng
Ruby Application Archive đóng vai trò là một kho lưu trữ đủ loại ứng dụng và các thư viện viết bằng Ruby, với hàng ngàn mục. Mặc dù số lượng ứng dụng sẵn có không lớn bằng với cộng đồng của Perl hay Python, vẫn có đủ loại công cụ và tiện ích nhằm hỗ trợ cho việc phát triển ngôn ngữ trong tương lai.
Về Đầu Trang Go down
http://11a7vip.heavenforum.com
Admin
Nhóm Điều hành
Nhóm Điều hành
Admin


Tổng số bài gửi : 346
Age : 33
Đến từ : Thiên đàng
Registration date : 22/01/2008

Character sheet
HP:
Ngôn ngữ lập trình Ruby Left_bar_bleue999999999/999999999Ngôn ngữ lập trình Ruby Empty_bar_bleue  (999999999/999999999)
SP:
Ngôn ngữ lập trình Ruby Left_bar_bleue7777777/7777777Ngôn ngữ lập trình Ruby Empty_bar_bleue  (7777777/7777777)

Ngôn ngữ lập trình Ruby Empty
Bài gửiTiêu đề: Re: Ngôn ngữ lập trình Ruby   Ngôn ngữ lập trình Ruby I_icon_minitimeTue Apr 01, 2008 8:40 pm

Ai có tài liệu, hướng dẫn về ngôn ngữ Ruby thì share nhe. Cái này làm web là mạnh, xịn lắm á.
Về Đầu Trang Go down
http://11a7vip.heavenforum.com
darksoul
Nhóm Điều hành
Nhóm Điều hành
darksoul


Tổng số bài gửi : 871
Age : 32
Đến từ : Paradise of dark [A7]
Registration date : 26/01/2008

Character sheet
HP:
Ngôn ngữ lập trình Ruby Left_bar_bleue100/100Ngôn ngữ lập trình Ruby Empty_bar_bleue  (100/100)
SP:
Ngôn ngữ lập trình Ruby Left_bar_bleue100/100Ngôn ngữ lập trình Ruby Empty_bar_bleue  (100/100)

Ngôn ngữ lập trình Ruby Empty
Bài gửiTiêu đề: Re: Ngôn ngữ lập trình Ruby   Ngôn ngữ lập trình Ruby I_icon_minitimeWed Apr 02, 2008 3:57 pm

hok hiu ji
Về Đầu Trang Go down
http://360.yahoo.com/my_profile-rxpGij81erQDUzwBJMqtD94ShJg-;_yl
Sponsored content





Ngôn ngữ lập trình Ruby Empty
Bài gửiTiêu đề: Re: Ngôn ngữ lập trình Ruby   Ngôn ngữ lập trình Ruby I_icon_minitime

Về Đầu Trang Go down
 
Ngôn ngữ lập trình Ruby
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
11A7 VIP :: Học tập :: Tin-
Chuyển đến