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