سؤال

أود أن أفهم ما هو الفرق بين هذين مفاهيم البرمجة. يمثل الأول عدم وجود نوع البيانات وفي هذا النوع موجود، ولكن لا توجد معلومات. بالإضافة إلى ذلك، أدرك أن هذه الوحدة تأتي من الأساس النظري البرمجة الوظيفي، لكن ما زلت لا أستطيع أن أفهم ما هو قابلية استخدام الوحدة البدائية (على سبيل المثال، في برنامج F #).

هل كانت مفيدة؟

المحلول

نوع الوحدة يجعل كل شيء أكثر انتظاما. إلى حد ما يمكنك التفكير في كل وظيفة في F # كأخذ معلمة واحدة وإرجاع نتيجة واحدة. تعمل الوظائف التي لا تحتاج إلى أي معلمات "وحدة" فعليا كمعلمة، ووظائف لا ترجع أي نتائج "وحدة" نتيجة لذلك. هذا لديه مجموعة متنوعة من المزايا؛ لأحد، اعتبر كيف في C # تحتاج إلى مجموعة من مفوضي "Func" لتمثيل مهام مختلفة من الآثار التي تعود القيم، بالإضافة إلى مفوضة "العمل" التي لا تعيد القيم (لأنها على سبيل المثال Func<int,void> ليست قانونية - لا يمكن استخدامها باطلة بهذه الطريقة، لأنه ليس نوعا ما "حقيقي").

أنظر أيضا أنواع وظيفة F #: المرح مع tuples و currying

نصائح أخرى

في البرمجة الوظيفية، نتحدث عادة عن تعيين المدخلات إلى المخرجات. هذا يعني حرفيا تعيين حجة لقيمة عودتها. ولكن إذا كان هناك شيء سيكون وظيفة في معنى نظرية الرياضيات / الفئة، فإنه يجب أن يعود شيئا ما. وبعد أ void القيمة تمثل أن وظيفة إرجاع أي شيء، وهو أمر لا معنى له في هذه الشروط.

unit هي الإجابة الوظيفية ل void. وبعد انها أساسا نوع مع قيمة واحدة فقط، (). وبعد لديها عدد من الاستخدامات، ولكن هنا واحد بسيط. دعنا نقول أن لديك شيء مثل هذا في لغة حتمية أكثر تقليدية:

public static <T, U> List<U> map(List<T> in, Function<T, U> func) {
  List<U> out = new ArrayList<U>(in.size());
  for (T t : in) {
     out.add(func.apply(t));
  }
  return out;
}

هذا ينطبق وظيفة معينة func إلى كل عنصر في القائمة، إنتاج قائمة جديدة من funcنوع الإخراج. ولكن ماذا يحدث إذا نجحت في وظيفة تطبع فقط حججها؟ لن يكون له نوع الإخراج، فما الذي يمكنك وضعه U?

في بعض اللغات، سيتم تمرير هذه الوظيفة كسر هذا الرمز (مثل في C #، حيث لا يمكنك تعيينها void إلى نوع عام). يجب عليك اللجوء إلى الحلول مثل وجود Action<T>, ، والتي يمكن أن تحصل clunky.

هذا هو المكان الذي unit مفيد: هو - هي يكون نوع، ولكن واحد قد يستغرق فقط قيمة واحدة. هذا يبسط بشكل كبير أشياء مثل التسلسل والتكوين، ويقلل إلى حد كبير من عدد الحالات الخاصة التي يجب أن تقلق بشأنها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top