Trước giờ mình ngỡ khoảng trắng trong Ruby không quan trọng, nên cứ hay nhấn space vô tội vạ (Không theo convention) nhưng hôm nay đọc được bài các câu hỏi phỏng vấn Ruby Developer thì mới ngộ ra rằng đúng là Ruby Parser sẽ không biên dịch những khoảng trắng thừa nhưng nếu bạn không hiểu cách Ruby parse như thế nào thì Chương trình của bạn sẽ dính bug hoặc cho ra kết quả không mong muốn.
Có lần, mình gõ đoạn Code y chang trong Ebook, nhưng khi biên dịch, lại báo lỗi ngay vị trí đó, thì ra là do mình bị dư một khoảng trắng.
Mời bạn xem đoạn Code sau:
def times_two(arg1)
puts arg1 * 2
end
def sum(arg1, arg2)
puts arg1 + arg2
end
Điều gì sẽ xảy ra nếu ta gọi 2 hàm trên bằng những dòng lệnh sau:
times_two 5
times_two(5)
times_two (5)
sum 1, 2
sum(1, 2)
sum (1,2)
Như mong đợi, 3 dòng đầu tiên sẽ in kết quả là 10 2 dòng tiếp theo in kết quả là 3
Tuy nhiên, dòng cuối lại bị báo lỗi
syntax error, unexpected ',', expecting ')' sum (1, 2)
Vấn đề là khoảng trắng giữa tên method và dấu ngoặc (, Bởi vì có khoảng trắng đó, trình dịch của Ruby sẽ nghĩ rằng (1, 2) là một biểu thức thể hiện cho một đối số. Nhưng (1, 2) lại không phải là một biểu thức đúng trong Ruby, do đó, nó sẽ gây lỗi.
Lưu ý rằng lỗi này sẽ không xảy ra với trường hợp method chỉ có 1 đối số (như method times_two trong bài) nên dòng lệnh sau vẫn đúng
times_two (5)
sum (1+2)
ArgumentError: wrong number of arguments (1 for 2)
Tham khảo thêm Ruby Top 10 Interview Questions