المكوّن الإضافي لمجمول Scala للكشف عن التعبيرات غير المستخدمة (غير Unit ).
Zerowaste متاح حاليًا لـ Scala 2.12.17+ و 2.13.10+ و 3.2.1+ و 3.3.0+ و 3.4.0+
يجب أن تكون المكونات الإضافية المترجمات مبنية لكل إصدار صغير من Scala. إذا لم يكن zerowaste متاحًا لإصدار Scala الذي تريد استخدامه (على الأرجح بعضها تم إصداره حديثًا) ، فيرجى تقديم مشكلة أو إرسال علاقات عامة.
crossScalaVersions في build.sbtsbt githubWorkflowGeneratebuild.sbt و Github تعمل البرمجة الوظيفية الخالصة في ظل مبدأ أن التعبيرات خالية من الآثار الجانبية. يتم التعامل مع الآثار الجانبية بدلاً من ذلك من خلال نوع يشبه IO ، مثل IO IO ، ويتم تنفيذها فقط على الاحتجاج runX غير الآمن ، وعادة ما يتم إخفاءه في مكان ما في رمز المكتبة.
نتيجة لذلك ، يمكن دائمًا افتراض أن التخلص من نتيجة التعبير في التعليمات البرمجية الوظيفية البحتة هو خطأ ، على سبيل المثال
val number = {
discardedExpression // pointless!
42
}هذا خطأ سهل ويمكن أن يؤدي إلى الأخطاء الصعبة ، مثل عندما يتم التخلص من إجراء مهم IO عن غير قصد. لا يمكن لمترجم سكالا اكتشاف هذه المشكلة لأن سكالا ليست لغة وظيفية بحتة ولا يمكن أن تفترض أن جميع التعبيرات نقية.
يعالج هذا البرنامج المساعد هذه المشكلة من خلال الإبلاغ عن تحذير لكل تعبير تم تجاهله يختلف نوعه عن Unit .
تمكين المكون الإضافي في build.sbt :
libraryDependencies += compilerPlugin( " com.github.ghik " % " zerowaste " % " <version> " cross CrossVersion .full)يصدر البرنامج المساعد تحذيرات ، ولكن غالبًا ما يكون من الجيد تحويلها إلى أخطاء في التجميع:
scalacOptions += " -Werror " لاحظ أن هذه التحذيرات ، على الرغم من تحويلها إلى أخطاء ، يمكن قمعها بشروح @nowarn :
import scala . annotation . nowarn
val number = {
discardedExpression : @ nowarn( " msg=discarded expression " )
42
}