4.3 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	title, localeTitle
| title | localeTitle | 
|---|---|
| Clojure More on Functions | Clojure More on Functions | 
المهام! انهم مهم جدا. من الصعب جدًا القيام بأي شيء بدون وظيفة. فهي جزء لا يتجزأ من أي لغة ، ولكن بشكل خاص Clojure ، لأنها لغة برمجة وظيفية ترفض التصميم الموجه للكائنات. دعونا نتعلم المزيد عنها!
Arity
يشير Arty إلى عدد الوسيطات التي تتوقعها الدالة الخاصة بك.
`;; add expects 2 arguments. Its arity is 2. (defn add [xy] (+ xy)) (add 2 2) ; => 4
;; + itself is a function, and it can have any number of arguments. (+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16) ;; and so on... ; => 136 `
تحتوي لغة Clojure على بعض الصيغ الخاصة التي تسمح لك بترك وظيفتك تختلف باختلاف عدد الحجج التي تتلقاها. وهذا ما يسمى arity متغير.
(defn foo  ([]                               ; if this function gets no arguments...  (println "Lisa needs braces!")) ; do this.  ([arg1]                           ; if this function gets 1 argument...  (println "Dental plan!")))      ; do this instead!  (foo)  ; => Lisa needs braces!  ;    nil  (foo "this is a placeholder argument.")  ; => Dental plan!  ;    nil  
وظائف مجهولة
دعونا ننظر إلى وظيفة بسيطة حقا: وظيفة تضيف 1 إلى رقم.
;; I've called this function "my-inc" so you don't confuse it with inc.  ;; inc is a built-in function that already does this for us.  (defn my-inc [n] (+ 1 n))  (inc' 5)  ; => 6  
هذا يبدو بسيطا جدا. يأخذ معلمة واحدة - n - ويعيد n + 1 . دعونا نختارها.
(def my-inc-2 (fn [n] (+ 1 n)))  (inc' 5)  ; => 6  
يمكنك أن ترى من هذا أن استخدام defn هو مجرد اختزال لاستخدام (def ... (fn ...)) . لكن هذا يكشف عن شيء مثير للاهتمام. ما نقوم به في الواقع ليس "تحديد وظيفة" ، إنه مجرد ربط وظيفة مجهولة باسم خاص - inc' . ماذا لو لم نعطيه اسما؟
((fn [n] (+ 1 n)) 5)  ; => 6  
بام! فقاعة! Kapow! وظائف مجهولة. قد يبدو هذا غير ذي جدوى الآن ، ولكنه يأتي في وقت لاحق مفيد جدًا لتطبيق الوظائف على القوائم باستخدام map reduce filter . إعطاء كل وظيفة تكتب اسمها يصبح مملاً ومرهق وسريع.
هناك طريقة أقصر لكتابة الوظائف المجهولة ، والمخصصة لوظائف قصيرة للغاية وبسيطة. لا يسمح للتدمير أو متغير المتعري. ومع ذلك ، فمن موجزة للغاية.
(#(+ 1 %) 5)  ; => 6  
#(...) هي طريقة اختصار لتعريف وظيفة مجهولة. تشير % إلى الوسيطة الأولى إلى الدالة. إذا كانت وظيفتك تتوقع العديد من الوسيطات ، فيمكنك استخدام %1, %2, ... %n .
(#(str %1 %2 %3) "foo" "bar" "baz")  ; => "foobarbaz"  
|  السابق
 السابق  الصفحة الرئيسية
 الصفحة الرئيسية  | التالى
 | التالى  |
 |
| حلقة وتكرار | جدول المحتويات | مجموعات |
