Elixir - พฤติกรรม
พฤติกรรมใน Elixir (และ Erlang) เป็นวิธีแยกและแยกส่วนทั่วไปของส่วนประกอบ (ซึ่งกลายเป็นโมดูลพฤติกรรม) ออกจากส่วนเฉพาะ (ซึ่งกลายเป็นโมดูลเรียกกลับ) พฤติกรรมเป็นหนทางในการ -
- กำหนดชุดของฟังก์ชันที่โมดูลต้องนำไปใช้
- ตรวจสอบให้แน่ใจว่าโมดูลใช้ฟังก์ชันทั้งหมดในชุดนั้น
หากคุณต้องการคุณสามารถนึกถึงพฤติกรรมเช่นอินเทอร์เฟซในภาษาเชิงวัตถุเช่น Java: ชุดลายเซ็นฟังก์ชันที่โมดูลต้องใช้
การกำหนดพฤติกรรม
ให้เราพิจารณาตัวอย่างเพื่อสร้างพฤติกรรมของเราเองจากนั้นใช้พฤติกรรมทั่วไปนี้เพื่อสร้างโมดูล เราจะกำหนดพฤติกรรมที่ทักทายผู้คนสวัสดีและลาก่อนในภาษาต่างๆ
defmodule GreetBehaviour do
@callback say_hello(name :: string) :: nil
@callback say_bye(name :: string) :: nil
end
@callbackคำสั่งใช้เพื่อแสดงรายการฟังก์ชันที่จำเป็นต้องใช้โมดูล นอกจากนี้ยังระบุเลขที่ ของอาร์กิวเมนต์ประเภทและค่าที่ส่งคืน
การนำพฤติกรรมมาใช้
เรากำหนดพฤติกรรมสำเร็จแล้ว ตอนนี้เราจะนำมาใช้และนำไปใช้ในหลายโมดูล ให้เราสร้างโมดูลสองโมดูลที่ใช้พฤติกรรมนี้เป็นภาษาอังกฤษและสเปน
defmodule GreetBehaviour do
@callback say_hello(name :: string) :: nil
@callback say_bye(name :: string) :: nil
end
defmodule EnglishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hello " <> name)
def say_bye(name), do: IO.puts("Goodbye, " <> name)
end
defmodule SpanishGreet do
@behaviour GreetBehaviour
def say_hello(name), do: IO.puts("Hola " <> name)
def say_bye(name), do: IO.puts("Adios " <> name)
end
EnglishGreet.say_hello("Ayush")
EnglishGreet.say_bye("Ayush")
SpanishGreet.say_hello("Ayush")
SpanishGreet.say_bye("Ayush")
เมื่อรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังนี้ -
Hello Ayush
Goodbye, Ayush
Hola Ayush
Adios Ayush
ดังที่คุณได้เห็นแล้วเรานำพฤติกรรมมาใช้โดยใช้ไฟล์ @behaviourคำสั่งในโมดูล เราต้องกำหนดฟังก์ชันทั้งหมดที่ใช้ในพฤติกรรมสำหรับโมดูลลูกทั้งหมด สิ่งนี้ถือได้ว่าเทียบเท่ากับอินเทอร์เฟซในภาษา OOP