Hôm nay, mình sẽ hướng dẫn các bạn nhập môn Ruby.

Câu hỏi trước hết, tại sao lại học Ruby, và tại sao lại sử dụng Ruby on Rails. Sau đó mình sẽ hướng dẫn các bạn cài đặt Ruby trên một số hệ điều hành phổ dụng. Ở phần thứ 3 sẽ là một số kiến thức cơ bản của lập trình trong ngôn ngữ Ruby. Phần cuối cùng mình sẽ đưa ra một số bài toán cơ bản để bạn đọc thử giải trong Ruby.

Các bạn có thể tham khảo thêm các nội dung khác trong khóa học Ruby on Rails tại Techmaster

Học lập trình web bằng ngôn ngữ Ruby

1. Giới thiệu

Ruby là ngôn ngữ lập trình hướng đối tượng do một tác giả người Nhật tên là Yukihiro Matsumoto phát triển vào khoảng giữa thập kỉ 90. Ruby có cú pháp đơn giản, dễ học, dễ nhớ, gần với tư duy logic thông thường. Người ta còn hài hước ví von rằng, Ruby speaks English Kế thừa những đặc tính của Ruby, Rails, framework dựa trên nền tảng Ruby, được David Heinemeier Hansson tạo vào năm 2003 để giúp các lập trình viên phát triển ứng dụng web có thể nhanh chóng, dễ dàng hơn trong công việc của họ. Rails giúp người lập trình viên giảm thiểu rất nhiều thời gian viết code với các công cụ của mình như generate & scaffolding. Rails quản lý mã nguồn theo mô hình Model – View – Controller (MVC) và có một cộng động rất lớn lập trình viên với hàng ngàn thư viện tiện dụng, miễn phí.

Có rất nhiều trang web nổi tiếng sử dụng Ruby on Rails như

  • https://github.com/ : Hệ thống quản lý source phân tán, được nhiều công ty lớn sử dụng, và có hơn 1,5 triệu người đang sử dụng trang web này như một nơi lưu trữ các dự án của họ
  • http://basecamp.com/ : website quản lý dự án online, ra đời vào năm 2004, cho đến nay đã có hơn 8 triệu dự án được quản lý trên website này.
  • http://twitter.com/: là trang mạng xã hội lớn thứ 2 sau facebook, rất được sử dụng phổ biến tại Mĩ và các nước châu Âu
  • http://www.scribd.com/: đây là trang web chia sẻ tài liệu trực tuyến lớn và nổi tiếng, có rất nhiều tài liệu hay và miễn phí được chia sẻ tại đây.

2. Cài đặt

Mình sẽ hướng dẫn các bạn cài đặt trên 1 số hệ điều hành phổ dụng như Windows, Mac, Ubuntu, CentOS. Bản thân mình thì thích sử dụng Linux OS như Ubuntu, hoặc CentOS chẳng hạn.

2.1 Trên Windows, Mac

Các bạn có thể download chương trình cài đặt Ruby trên Windows tại đây
R
ails Installer sẽ giúp bạn cài đặt Ruby, Rails trên Windows và Mac rất dễ dàng. Nhưng sau đó, bạn sẽ cần một chút kĩ năng thao tác trên terminal như

## Một số lệnh thường được sử dụng trong terminal khi code Ruby on Rails

irb # => mở interactive ruby console
cd folder # => Đi tới folder nào đó
rails new my_app # => tạo một application mới
bundle install # => cài đặt các thư viện
rails server # => Khởi động dự án tại localhost:3000
rails console # => mở console của rails để tương tác với dữ liệu

Đối với MacOS, các bạn hoàn toàn có thể cài đặt manual, dù phức tạp hơn một chút

2.2 Trên Ubuntu

sudo apt-get install curl
curl -L get.rvm.io | bash -s stable
 
## Cài đặt những gói thư viện phụ thuộc khác
sudo apt-get install build-essential openssl libreadline6
libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev
libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev
autoconf libc6-dev ncurses-dev automake libtool bison
subversion pkg-config
 
## Load RVM vào terminal và khởi động lại terminal
source ~/.rvm/scripts/rvm
type rvm | head -n 1
 
## Install Ruby 
rvm install 2.0.0
rvm use 2.0.0 --default
 
## Cài đặt git để quản lý source code và deploy lên Heroku
sudo apt-get install git-core build-essential
 
## Cài đặt Rails
gem install

2.3 Trên CentOS

yum groupinstall -y development

curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh

rvm reload
rvm install 2.1.0 

ruby --version
rvm list rubies
rvm use 2.1.0 --default

3. Ruby Basic

3.1 Đối tượng trong Ruby

Mọi thứ trong Ruby đều là đối tượng, và mang thuộc tính của đối tượng đó. Ví dụ:

$ irb ## Mở Ruby interactive
2.1.1 :001 > "Sample String".class
 => String 
2.1.1 :002 > "Sample String".concat " - another String"
 => "Sample String - another String"

Bạn có thể tìm thấy rất nhiều các built-in functions của các class trong Ruby. Ví dụ: http://www.ruby-doc.org/core-2.1.4/String.html

Bạn cũng có thể định nghĩa một class mới theo cú pháp:

## Class example
class NewClass
  def hi_world
    puts "Hi World! I'm Colin Dao"
  end
end

new_class_obj = NewClass.new
new_class_obj.hi_world # => Hi World! I'm Colin Dao

3.2 Ruby variable

Biến trong Ruby gồm một số loại như global variable, class variable, instance variable, local variable.

 Trong khuôn khổ bài viết này, mình sẽ không đề cập tới class variable vì có thể khiến cho bạn confuse với instance variable.

3.2.1 Global variable:

Có thể sử dụng trong tất cả các class.

Ví dụ:

$global_variable = 10
class Class1
 def print_global
   puts "Global variable in Class1 is #{$global_variable}"
 end
end

class Class2
  def print_global
    puts "Global variable in Class2 is #{$global_variable}"
  end
end

class1obj = Class1.new
class1obj.print_global

class2obj = Class2.new
class2obj.print_global

 3.2.2 Instance Variable:

Có thể sử dụng giữa các functions trong cùng 1 class

class Customer
  def initialize(name, email)
    @customer_name = name
    @customer_email = email
  end
  def print_customer_info
    puts "Customer name: #{@customer_name}"
    puts "Customer email: #{@customer_email}"
  end
end

customer1 = Customer.new("colin", "colindao@techmaster.vn")
customer1.print_customer_info
## => Customer name colin
## => Customer email colindao@techmaster.vn

3.2.3 Local Variable: 

Sử dụng trong một hàm hoặc block. Điều hay là bạn chỉ cần khởi tạo, không cần khai báo

class Class1
  def demo_local_variable(input_local_variable)
    begin
      [1, 2].each do |i|
        in_block_local_variable = i
        puts "in_block_local_variable #{in_block_local_variable}"
      end
      puts "call in_block_local_variable outside --> "
      puts "#{in_block_local_variable}"
    rescue Exception => e
      puts e.message
    end
  end
end

class1_obj = Class1.new
class1_obj.demo_local_variable() 
## -> undefined local variable or method `in_block_local_variable' for Class1

3.3 Ruby Loop

## FOR LOOP
for i in (0..5) do
  puts "#{i}"
end
## 0..5 == [0, 1, 2, 3, 4, 5]
## EACH LOOP
(0..5).each do |i|
  puts "#{i}"
end
## BREAK => Kết thúc khối loop
(0..5).each do |i|
  break if i == 2
  puts "#{i}"
end
## NEXT => chuyển sang vòng lặp tiếp theo
(0..5).each do |i|
  next if i == 2
  puts "#{i}"
end

## WHILE LOOP"
var1 = 0
while var1 < NUM do
  ## this block of code will be executed while conditions are true
  puts "#{var1}"
  var1 += 1
end

3.4 Ruby Conditions

if condition1
  ## Thực hiện đoạn code nếu condition1 là true, not nil
elsif condition1
  ## we use elsif, not else if
  ## Thực hiện đoạn code nếu condition 1 là false, hoặc nil và
  ## condition 2 là true, not nil
else
  ## Thực hiện đoạn code nếu condition 1 false, hoặc nil và
  ## condition 2 là false hoặc nil
end

## Nếu đoạn code thực hiện đơn giản
code if condition

3.5 Array

## Khởi tạo
a = Array.new
a = []
1..5 == [1, 2, 3, 4, 5]
a = [1, 2, 3, 4, 5]
a[0]
a[1]
a[-1]
a[-2] 

a.push(1)
a.index(2)
a.include? 2

a.each do |i|
  puts "#{i}" if i == 3
end

3.6 Hash

## Hash structure: { key1: value1, key2: value2, key3: value3 }
h = Hash.new
h[:key] = "value"
h
h[:key]
h.has_key?(:key)
h.has_value?("value")
h.keys
h.values 

h3 = { "a" => 100, "b" => 200, "c" => 300 }
h3.select {|k,v| k > "a"} 
# => {"b" => 200, "c" => 300}

3.7 String

## Truyền giá trị của biến vào string: 
puts #{x}
## Array of string: 
%w(one two three) == [“one”, “two”, “three”]

4. Labs

Mình có một số bài tập để bạn có thể luyện tập kiến thức Ruby của mình. Hãy thử xem nhé. Nếu bạn thấy nó dễ quá, bạn có thể tìm hiểu thêm về test và làm theo phương thức TDD nhé (Test – Code – Refactoring).

Đếm số chữ số của số tự nhiên N

Tìm các phần tử chung của 2 mảng mà không sử dụng method có sẵn của Ruby

Viết hàm kiểm tra xem mảng này có là tập con của mảng khác hay không

Xóa bỏ các kí tự trùng lặp trong string

Sử dụng Hash viết chương trình đọc input file và in ra output file số lầnxuất hiện của từng loại kí tự

Trên đây là một phần lý thuyết và bài tập trong khóa học Ruby on Rails tại Techmaster. Trong các bài tới mình sẽ giới thiệu và hướng dẫn các bạn có kiến thức cơ bản về Rails.

Hope you enjoy it!