English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

الوظائف لإrlang

Erlang هو لغة برمجة وظيفية معروفة على نطاق واسع، لذلك ستشاهد الكثير من التركيز على كيفية عمل الدوال في Erlang. يقدم هذا الفصل كيفية استخدام الدوال في Erlang لتنفيذ جميع العمليات.

تعريف الدالة

نص إعلان الوظيفة كالتالي :

النص الرباعي

اسم_الوظيفة(نمط_1… نمط_N) ->
جسم;

في هذا السياق

  • FunctionName − يجب أن يكون اسم الوظيفة رمزًا (فريدًا)

  • Pattern1… PatternN − كل متغير هو نموذج. عدد المتغيرات N هو عدد متغيرات الوظيفة. يجب أن يكون اسم الوظيفة فريدًا في نفس الكائن، حتى لو كانت تحتوي على نفس الاسم في نفس الكائن ولكنها تحتوي على عدد مختلف من المتغيرات.

  • جسم − جسم الجملة هو سلسلة من التعبيرات المفصولة بالكومياء (,)

البرنامج أدناه مثال بسيط على استخدام وظيفة -

مثال

-module(helloworld). 
-export([add/2,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
start() -> 
   add(5,6).

للبرنامج أعلاه بعض النقاط التي يجب مراعاتها -

  • قمنا بتعريف وظيفتين، واحدة هي add، تحتاج إلى 2 معامل، والأخرى هي start؛

  • هذه الوظائف تستخدم وظيفة export لتعريفها. إذا لم نفعل ذلك، فإنه لا يمكن استخدام الوظائف؛

  • يمكن للوظيفة أن تُدعى داخل وظيفة أخرى. هنا، يتم استدعاء وظيفة add داخل وظيفة start؛

نتيجة الخروج للكود أعلاه هي -

11

وظيفة مجهولة

وظيفة مجهولة هي وظيفة، لكنها ليست مرتبطة بأي اسم. في Erlang، هناك أدوات يمكن استخدامها لتحديد وظائف مجهولة. البرنامج أدناه مثال على وظيفة مجهولة.

مثال

-module(helloworld). 
-export([start/0]). 
start() -> 
   Fn = fun() -> 
      io:fwrite("وظيفة مجهولة") end, 
   Fn().

للنموذج أعلاه بعض النقاط التي يجب مراعاتها -

  • تُحدد الوظيفة المجهولة باستخدام الكلمة المفتاحية fun()

  • تُنسب هذه الوظيفة إلى متغير يُدعى Fn

  • تُدعى هذه الوظيفة عبر اسم المتغير

نتيجة الخروج للكود أعلاه هي -

وظيفة مجهولة

وظيفة باستخدام معلمات متعددة

يمكن استخدام وظائف Erlang بلا معلمات أو بمعلمات متعددة. يمكن أيضًا تعريف وظيفة مكررة بنفس الاسم، طالما كانت عدد المعلمات مختلفة. في المثال أدناه، يتم تعريف كل وظيفة من وظائف demo باستخدام معلمات متعددة.

مثال على الكود

-module(helloworld). 
-export([add/2,add/3,start/0]). 
add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
add(X,Y,Z) -> 
   A = X+Y+Z, 
   io:fwrite("~w~n",[A]). 
 
start() ->
   add(5,6), 
   add(5,6,6).

في البرنامج أعلاه، قمنا بتعريف وظيفة add مرتين. لكن تعريف وظيفة add الأولى يستخدمان فقط اثنين من المعلمات، بينما تعريف وظيفة add الثانية يستخدم ثلاثة معلمات.

نتيجة الخروج للكود أعلاه هي -

11
17

استخدام السلسلة في الوظيفة

في Erlang، لدي أيضًا وظائف الحماية. هذه ليست شيء كبير، إنها مجرد تعبير، وتبدأ الوظيفة فقط عند التقييم (الحساب) لها كـ true.

الجملة النصية لاستخدام وظيفة السلسلة الحماية مثلما هو موضح في البرنامج أدناه.

اسم_الوظيفة(نمط_1… نمط_N) [عند حارس_السلسلة_1]->
جسم;

في هذا السياق

  • FunctionName − يجب أن يكون اسم الوظيفة رمزًا (فريدًا)

  • Pattern1… PatternN − كل متغير هو نموذج. عدد المتغيرات N هو عدد متغيرات الوظيفة. يجب أن يكون اسم الوظيفة فريدًا في نفس الكائن، حتى لو كانت تحتوي على نفس الاسم في نفس الكائن ولكنها تحتوي على عدد مختلف من المتغيرات.

  • جسم − جسم الجملة هو سلسلة من التعبيرات المفصولة بالكومياء (,)

  • GuardSeq1 − عندما يتم استدعاء الوظيفة، فإنها تحصل على التعبير الذي يتم حسابه.

هذا البرنامج هو مثال بسيط على وظيفة تستخدم سلسلة الحماية.

مثال على الكود

-module(helloworld). 
-export([add/1,start/0]). 
add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 
start() -> 
   add(4).

نتيجة الخروج للكود أعلاه هي -

4

إذا تم استدعاء وظيفة add كـ add(3)، فإن البرنامج سيظهر خطأ.