Elixir - Các loại mã
Elixir là một ngôn ngữ được nhập động, vì vậy tất cả các kiểu trong Elixir đều được suy ra bởi thời gian chạy. Tuy nhiên, Elixir đi kèm với các tệp kiểu chữ, là một ký hiệu được sử dụng chodeclaring custom data types and declaring typed function signatures (specifications).
Thông số kỹ thuật chức năng (thông số kỹ thuật)
Theo mặc định, Elixir cung cấp một số kiểu cơ bản, chẳng hạn như số nguyên hoặc pid, và cả các kiểu phức tạp: ví dụ: roundhàm, làm tròn một số thực đến số nguyên gần nhất của nó, nhận một số làm đối số (số nguyên hoặc số thực) và trả về một số nguyên. Trong tài liệu liên quan , chữ ký đánh máy tròn được viết là -
round(number) :: integer
Mô tả ở trên ngụ ý rằng hàm bên trái nhận làm đối số là những gì được chỉ định trong ngoặc đơn và trả về những gì ở bên phải của ::, tức là Số nguyên. Thông số chức năng được viết với@specchỉ thị, được đặt ngay trước định nghĩa hàm. Hàm vòng có thể được viết là -
@spec round(number) :: integer
def round(number), do: # Function implementation
...
Các stylespec cũng hỗ trợ các kiểu phức tạp, ví dụ: nếu bạn muốn trả về một danh sách các số nguyên, thì bạn có thể sử dụng [Integer]
Các loại tùy chỉnh
Trong khi Elixir cung cấp rất nhiều kiểu sẵn có hữu ích, rất tiện lợi để xác định các kiểu tùy chỉnh khi thích hợp. Điều này có thể được thực hiện khi xác định các mô-đun thông qua chỉ thị @type. Chúng ta hãy xem xét một ví dụ để hiểu giống nhau -
defmodule FunnyCalculator do
@type number_with_joke :: {number, String.t}
@spec add(number, number) :: number_with_joke
def add(x, y), do: {x + y, "You need a calculator to do that?"}
@spec multiply(number, number) :: number_with_joke
def multiply(x, y), do: {x * y, "It is like addition on steroids."}
end
{result, comment} = FunnyCalculator.add(10, 20)
IO.puts(result)
IO.puts(comment)
Khi chương trình trên được chạy, nó tạo ra kết quả sau:
30
You need a calculator to do that?
NOTE - Các loại tùy chỉnh được xác định thông qua @type được xuất và có sẵn bên ngoài mô-đun mà chúng được xác định. Nếu bạn muốn giữ một loại tùy chỉnh ở chế độ riêng tư, bạn có thể sử dụng @typep chỉ thị thay vì @type.