Tên phương pháp trong Ruby có thể chứa chữ hoa và chữ thường, số, dấu gạch dưới _
và dấu chấm câu !
, ?
, =
.
Tên phương thức không thể bắt đầu bằng số và các ký tự !
, ?
và =
chỉ có thể xuất hiện ở cuối.
Ký tự không phải ASCII có thể được sử dụng trong tên phương thức, nhưng điều này có thể dẫn đến các tình huống rất khó hiểu và không nên phổ biến.
Thực hành tốt, trong khi không bắt buộc, để bắt đầu tên phương thức có ký tự chữ thường, vì tên bắt đầu bằng chữ hoa là hằng số trong Ruby. Nó vẫn có thể sử dụng một tên liên tục cho một phương pháp, nhưng bạn sẽ không thể gọi nó mà không có dấu ngoặc đơn, vì interpeter sẽ nhìn-up cho cái tên như một hằng số:
def Capital
nil
end
Capital # NameError: uninitialized constant Capital
Capital() # => nil
Một số rất rộng rãi và luôn sử dụng ước khi xác định tên phương pháp là:
tên phương có đầy đủ xuống hợp cụ thể, với dấu gạch _
như tách các từ vào tên (ví dụ Math::sqrt
, Array#each_index
, ...).
vị từ có một dấu hỏi ?
nhân vật như cuối cùng (ví dụ Array#empty?
, Hash#has_key?
, ...). Mặc dù các biến vị ngữ thường trả về giá trị boolean, nhưng các phương thức này chỉ cần trả về nil
hoặc false
nếu biến vị ngữ ước tính sai, bất kỳ giá trị nào khác (ví dụ: File::size?
trả về nil
nếu tệp không tồn tại, kích thước của dưới dạng Integer
nếu không).
Phương pháp sửa đổi trạng thái của đối tượng mà chúng được gọi hoặc có hành vi bất thường có dấu chấm than !
làm ký tự cuối cùng; các phương pháp này đôi khi được gọi là biến thể vì chúng thường là phiên bản phá hoại hoặc tại chỗ của các phương pháp khác (ví dụ: Array#sort!
, Array#slice!
, ...).
Setters có dấu bằng =
làm ký tự cuối cùng (ví dụ: Array#[]=
, ...); các interpeter của Ruby cung cấp cú pháp đường cho invokation các phương pháp setter:
a = [4, 5, 6]
a[0] = 3 # Shorthand for a.[]=(0, 3)
Ruby cũng cho phép xác định các nhà khai thác sử dụng các biểu tượng điều hành như tên phương pháp:
╔═══════════════════════════╦═════════════════════════════════════════════╦═══════╗
║ Operators (by precedence) ║ Operations ║ Arity ║
╠═══════════════════════════╬═════════════════════════════════════════════╬═══════╣
║ ! ~ + ║ Boolean NOT, bitwise complement, unary plus ║ 1 ║
║ ║ (define with method name [email protected], Ruby 1.9+) ║ ║
║ ║ ║ ║
║ ** ║ Exponentiation ║ 2 ║
║ ║ ║ ║
║ - ║ Unary minus (define with method name [email protected]) ║ 1 ║
║ ║ ║ ║
║ */% ║ Multiplication, division, modulo ║ 2 ║
║ ║ ║ ║
║ + - ║ Addition, subtraction ║ 2 ║
║ ║ ║ ║
║ << >> ║ Bitwise shift ║ 2 ║
║ ║ ║ ║
║ & ║ Bitwise AND ║ 2 ║
║ ║ ║ ║
║ |^ ║ Bitwise OR, Bitwise XOR ║ 2 ║
║ ║ ║ ║
║ < <= => > ║ Ordering ║ 2 ║
║ ║ ║ ║
║ == === != =~ !~ <=> ║ Equality, pattern matching, comparison ║ 2 ║
╚═══════════════════════════╩═════════════════════════════════════════════╩═══════╝
phương pháp điều hành unary là không có đối số; các phương thức toán tử nhị phân được truyền vào một đối số và hoạt động trên nó và trên self
.
Điều quan trọng là phải tuân thủ nghiêm ngặt tính chất của các nhà khai thác; trong khi có thể xác định các phương thức toán tử bằng một phép tính khác (ví dụ: phương thức +
lấy hai đối số), Ruby sẽ không cho phép bạn gọi phương thức với cú pháp toán tử (tuy nhiên nó sẽ làm việc với cú pháp dấu chấm). Đó là thực hành tốt để tuân theo ngữ nghĩa ban đầu của các toán tử càng nhiều càng tốt: nó nên trực quan với người biết ý nghĩa ban đầu của toán tử cách nó hoạt động với các lớp do người dùng định nghĩa.
Ngôn ngữ cũng cung cấp cú pháp đường cho phương pháp đặc biệt, phi điều hành, []
thường được sử dụng để truy cập giá trị mảng và giá trị băm. Phương pháp []
có thể được xác định bằng tính chất tùy ý.
Đối với mọi toán tử nhị phân trong bảng, ngoại trừ thứ tự, bình đẳng, so sánh và đối sánh mẫu, Ruby cũng cung cấp cách viết tắt cho bài tập viết tắt (ví dụ: x += y
mở rộng đến x = x + y
); bạn không thể định nghĩa chúng như là các phương thức, nhưng bạn có thể thay đổi hành vi của chúng xác định các toán tử mà chúng dựa vào chúng.
Không thể sử dụng ký tự nào trong các tên phương thức thông thường (ví dụ: do&print
hoặc start-up
không phải là tên phương thức hợp lệ).
Câu trả lời hay! Một lưu ý nhỏ: Nó là phong tục cho các phương thức dự báo (với một '?') Để trả về các giá trị falsey ('nil' hoặc' false') hoặc truethy (mọi thứ khác), không cần thiết 'true' và' false'. Giá trị trả về được sử dụng trong các câu lệnh 'if' khi nó hoạt động giống như nếu nó là' true' và 'false' nhưng giá trị trả về thực tế thường không phải là một phần của giao diện phương thức dự định, chỉ là thuộc tính truethy hoặc falsey. –
Cảm ơn lời khuyên, tôi đã chỉnh sửa tương ứng. –
Cũng có một số ký tự chỉ có thể được sử dụng làm tên toàn bộ phương thức, nghĩa là bạn có thể xác định các phương thức được gọi là - + * **/(nếu bạn đang quá tải các toán tử đó) chứ không phải phương thức gọi là foo + bar –