Crystal tut 1: Làm quen với Crystal - Hello World!

  May 23, 2018      2m
   

Series bài hướng dẫn cơ bản về học ngôn ngữ lập trình Crystal. Bài 1 này sẽ hướng dẫn làm quen với Crystal, nhập xuất trên màn hình (I/O) với Crystal.

Crystal tut 1: Làm quen với Crystal - Hello World!

Giới thiệu Crystal

  Ưu điểm Crystal

  Nhược điểm Crystal

  • Thời gian biên dịch chậm (vài giây cho 1 chương trình?). Issue thảo luận: https://github.com//crystal-lang/crystal/issues/4864
  • Ít bài hỏi đáp trên Stackoverflow nên hơi khó trong việc tìm kiếm. Keyword tim kiếm: crystal lang.
  • Chưa release phiên bản 1.0 (phiên bản hiện tại: 0.24.2).

Vậy: Crystal phù hợp cho viết các chương trình xử lý nhỏ, ứng dụng web cần hiệu suất cao.

Hello World

hello_world.cr

p "Hello World!"

Biên dịch code Crystal thành file thực thi (trên Linux):

$ crystal build hello_world.cr

Biên dịch và chạy chương trình Crystal trong 1 câu lệnh:

$ crystal run hello_world.cr

Chú thích / Comment trong Crystal

Ký tự # dùng để chú thích cho 1 dòng lệnh, và Crystal mới chỉ hỗ trợ chú thích code cho 1 dòng, chưa thể chú thích code cho 1 block.

p "Hello World!"
# The equivalent command is: puts "Hello World!"

Nhập xuất trong Crystal (I/O)

Ta hãy bắt đầu với 1 chương trình đơn giản sau:

Code 1: Chương trình cho phép người dùng nhập vào tên, sau đó in ra "Hello" + tên người đó.

hello_user.cr

print "Enter your name: "
name = gets.not_nil!
p "Hello " + name

Chạy thử chương trình:

$ crystal run hello_user.cr
Enter your name: Minh
"Hello Minh"
  • Lệnh print để chuỗi không có ký tự xuống dòng.
  • Lệnh puts / p sẽ in chuỗi và xuống dòng.
  • not_nil! sau gets để báo với trình biên dịch rằng input nhập vào chắc chắn không Nil. Nếu không sẽ báo lỗi lúc runtime. Tham khảo: https://crystal-lang.org/api/Nil.html.

Code 2: Chương trình cho phép người dùng nhập vào hai số nguyên, sau đó tính toán và in ra các kết quả sau: tổng, hiệu, tích, thương và chuỗi ghép 2 số đó.

hello_number.cr

print "Enter the first number A: "
num1 = gets.not_nil!

print "Enter the second number B: "
num2 = gets.not_nil!

# convert string to integer
num1 = num1.to_i(strict: false)     # num1 = num1.to_i <-- you should try this :)
num2 = num2.to_i(strict: false)     # num2 = num2.to_i <-- you should try this :)

s = num1 + num2
p "A + B = " + s.to_s

m = num1 - num2
p "A - B = " + m.to_s

p "A * B = " + (num1 * num2).to_s
p "A / B = " + (num1 / num2).to_s
p "AB = " + num1.to_s + num2.to_s

Chạy chương trình Crystal trên:

$ crystal run hello_number.cr
Enter the first number A: 5
Enter the second number B: 2
"A + B = 7"
"A - B = 3"
"A * B = 10"
"A / B = 2"
"AB = 52"
  • Việc covert từ chuỗi sang số nguyên có thể thực hiện dễ dàng bằng phương thức to_i. Nếu ta đặc tả strict: true thì chuỗi convert phải thỏa là số nguyên (chặt chẽ), trường hợp chuỗi có dạng số thực: "2.5", "1.333", … sẽ báo lỗi lúc thực thi. Việc chỉ định tham số strict: false sẽ cho phép ta convert chuỗi có format số thực thành số nguyên. Ví dụ: "2.5" –> 2, "1.333" –> 1.
  • Convert ngược lại từ số hoặc kiểu dữ liệu khác sang chuỗi thật dễ dàng, chỉ cần dùng .to_s sau tên biến.

Tất cả script Crystal của các tutorial mình sẽ tổng hợp trên Github tại đường dẫn sau:

  https://github.com/minhng92/crystal-examples

Crystal Tutorials: