"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إتقان Java n One Go: رحلة ممتعة إلى الجنة الوظيفية

إتقان Java n One Go: رحلة ممتعة إلى الجنة الوظيفية

تم النشر بتاريخ 2024-11-08
تصفح:939

مرحبًا بعشاق جافا! استعدوا، لأننا على وشك الشروع في الغوص العميق في عالم Java 8، الإصدار الذي جعل Java أكثر وظيفية، وأكثر انسيابية، و(أجرؤ على قول ذلك؟) المزيد هزار. فكر في Java 8 باعتباره الترقية التي طال انتظارها من هذا الهاتف القديم القابل للطي إلى أحدث هاتف ذكي - مليئة بالميزات التي لم تكن تعلم حتى أنك بحاجة إليها ولكن الآن لا يمكنك العيش بدونها.

هذا الدليل هو سلاحك النهائي لإتقان Java 8، وهو مليء بـ شروحات سهلة الفهم، حالات استخدام واقعية، وقليل من الفكاهة لإبقاء الأمور مثيرة . في النهاية، ستصبح محترفًا في Java 8، وجاهزًا لتطبيق هذه المهارات الجديدة في مشاريعك الخاصة. هيا بنا نتعمق!


1. تعبيرات لامدا: Java تصبح مجهولة

تخيل أنك في بوفيه ويتيح لك الشيف إنشاء الطبق الخاص بك دون تسميته، وهذا ما تسمح به Lambda Expressions في Java! إنها مثل الأساليب المجهولة، وهي مثالية لتلك المهام التي قد يبدو فيها إنشاء طريقة كاملة أمرًا مبالغًا فيه.

لماذا نستخدم تعبيرات لامدا؟

  • الإيجاز: يقلل من التعليمات البرمجية المعيارية. قل وداعًا للطبقات الداخلية المجهولة.
  • تحسين إمكانية القراءة: لا حاجة للتمرير إلى تعريفات الطرق التي لا نهاية لها.
  • البرمجة الوظيفية: Java 8 يميل نحو البرمجة الوظيفية، و lambdas هي بوابتك.

متى تستخدم تعبيرات لامدا؟

  • عندما تريد البساطة: بدلاً من إنشاء أجسام الطريقة الكاملة، يمكن لـ lambdas تكثيف الأشياء في سطر واحد.
  • الواجهات الوظيفية: عندما تواجه واجهات تحتوي على طريقة مجردة واحدة فقط (مثل Runnable، Comparator)، فإن lambdas هي أفضل أصدقائك.

كيفية استخدام تعبيرات لامدا؟

java
Copy code
// Before Java 8
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Old Java is not cool");
    }
}).start();

// After Java 8
new Thread(() -> System.out.println("Java 8 is awesome!")).start();

حالة الاستخدام الواقعية

تصور هذا: أنت تقوم ببناء برنامج جدولة المهام في بنية الخدمات الصغيرة المستندة إلى Java، وتحتاج إلى تنفيذ المهام الصغيرة بشكل متزامن. بدلاً من إنشاء تنفيذ كامل لكل مهمة على حدة، يمكنك تمرير lambdas للإجراء الذي تريد تنفيذه في كل سلسلة رسائل. أنيق، أليس كذلك؟


2. الواجهات الوظيفية: الأقل هو الأكثر

الواجهة الوظيفية هي مجرد واجهة ذات طريقة مجردة واحدة . يمكنك أن تفكر فيها كآلة صنع القهوة التي تستخدم لمرة واحدة، فهي تؤدي وظيفة واحدة، ولكنها تؤديها بشكل جيد حقًا.

لماذا نستخدم الواجهات الوظيفية؟

  • رمز المنظف: ادمجهم مع لامدا للحصول على كود أكثر انسيابية.
  • التوحيد القياسي: توفر الواجهات الوظيفية المسندة والوظيفة والمستهلك وما إلى ذلك مخططًا لكيفية هيكلة التعليمات البرمجية بأسلوب وظيفي.
متى تستخدم الواجهات الوظيفية؟

  • عندما تريد العمل مع لامدا: إذا كان لديك لامدا، فأنت بحاجة إلى واجهة وظيفية لاستخدامها.
كيفية استخدام الواجهات الوظيفية؟

جافا نسخ الرمز // مثال باستخدام الواجهة الوظيفية المسندة المسند isEven = number -> number % 2 == 0; System.out.println(isEven.test(4)); // الإخراج: صحيح
java
Copy code
// Example using Predicate Functional Interface
Predicate isEven = number -> number % 2 == 0;

System.out.println(isEven.test(4));  // Output: true

حالة الاستخدام الواقعية

لنفترض أنك تقوم بإنشاء

نظام تصفية المستخدم لأحد التطبيقات. تحتاج إلى تصفية المستخدمين بناءً على معايير مختلفة (العمر والموقع وحالة النشاط). بدلاً من كتابة منطق مخصص في كل مكان، استخدم Predicate لإنشاء مرشحات مرنة مثل isAdult وisActive وما إلى ذلك، وقم بتوصيلها بطرق التصفية الخاصة بك. أصبحت قابلية التوسع بسيطة!


3.

واجهة برمجة تطبيقات التدفقات: حالة التدفق في Java

تشبه واجهة برمجة التطبيقات (&&&) Streams API

خط التجميع في المصنع. يقوم بمعالجة البيانات في مسار، حيث تحدد سلسلة من الخطوات (العمليات) التي تحول بياناتك بطريقة نظيفة وفعالة. لماذا استخدام التدفقات؟

    تبسيط معالجة البيانات
  • : مثالي لتحويل المجموعات.
  • التقييم البطيء
  • : يتم تنفيذ العمليات فقط عند الضرورة، مما يعني أداء أفضل.
  • التوازي
  • : يمكنك موازنة العمليات للاستفادة من المعالجات متعددة النواة بدون تعليمات برمجية معقدة.
  • متى تستخدم التدفقات؟

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

جافا نسخ الرمز Listnames = Arrays.asList("Alice"، "Bob"، "Charlie"، "David"); // استخدام الدفق لتصفية الأسماء وجمعها قائمة أسماء مرشحة = أسماء.تيار () .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); System.out.println(filteredNames); // الإخراج: [أليس]

java
Copy code
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// Using Stream to filter and collect names
List filteredNames = names.stream()
                                  .filter(name -> name.startsWith("A"))
                                  .collect(Collectors.toList());

System.out.println(filteredNames);  // Output: [Alice]

تخيل أنك تعمل على

منصة التجارة الإلكترونية

. تحتاج إلى معالجة الآلاف من طلبات العملاء لتطبيق الخصومات والعثور على أفضل البائعين وإنشاء التقارير. تتيح لك Streams API إنشاء مسار سلس لتصفية البيانات ورسم الخرائط وتقليلها، مع الحفاظ على إيجاز التعليمات البرمجية والعمليات بسرعة البرق.

4.
اختياري: شبكة أمان للقيم الخالية

هل سئمت من مفاجآت NullPointerException التي تدمر يومك؟ تعرف على

اختياري

— إجابة Java 8 للتعامل الآمن مع القيم الفارغة. إنها بمثابة شبكة أمان تحت فنان الأرجوحة، حيث تلتقط القيم الخالية المحتملة وتسمح لك بالتعامل معها بأمان. لماذا استخدام اختياري؟

    يتجنب NullPointerExceptions
  • : اختياري يشجعك على التفكير في القيم الخالية مقدمًا.
  • يحسن إمكانية قراءة التعليمات البرمجية
  • : بدلاً من التحقق مما إذا كان (شيء != فارغ) في كل مكان، يجعل الاختياري نواياك واضحة.
  • متى تستخدم اختياري؟

    عندما تكون القابلية للإلغاء جزءًا من منطق عملك
  • : يكون الخيار الاختياري مثاليًا عندما تكون القيمة موجودة أو غير موجودة، كما هو الحال عند استرداد قيمة التكوين أو البحث عن مستخدم.
  • كيفية استخدام اختياري؟

جافا نسخ الرمز اختياري OptionName = اختياري.ofNullable(getName()); OptionalName.ifPresent(name -> System.out.println("مرحبًا، "اسم)); String defaultName = OptionalName.orElse("Guest"); System.out.println("مرحبًا،" defaultName);

java
Copy code
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// Using Stream to filter and collect names
List filteredNames = names.stream()
                                  .filter(name -> name.startsWith("A"))
                                  .collect(Collectors.toList());

System.out.println(filteredNames);  // Output: [Alice]

تخيل أنك تقوم بتطوير

نظام ملف تعريف المستخدم

. في بعض الأحيان يقوم المستخدمون بملء سيرتهم الذاتية، وفي أحيان أخرى لا يفعلون ذلك. بدلاً من تشغيل "هل هي فارغة؟" لعبة التخمين، استخدم الاختياري للتعامل بأمان مع حقول الملف الشخصي الفارغة أو المفقودة.

5.
الأساليب الافتراضية والثابتة في الواجهات: التطور، وليس الثورة

قبل Java 8، كانت الواجهات مثل العقود المكتوبة على الحجر - لا يمكنك تغييرها بمجرد إنشائها. لكن الآن، أصبحت الواجهات أكثر مرونة، وذلك بفضل الأساليب

الافتراضية

والثابتة. لماذا نستخدم الطرق الافتراضية والثابتة؟

    التوافق مع الإصدارات السابقة
  • : أضف وظائف جديدة إلى الواجهات الموجودة دون انقطاع التنفيذ.
  • الملاءمة
  • : الأساليب الثابتة تسمح بطرق المرافق مباشرة داخل الواجهة.
  • متى تستخدم الطرق الافتراضية والثابتة؟

    عندما تريد توسيع الواجهة دون إجبار جميع التطبيقات على التغيير
  • .
  • عندما تريد إنشاء طرق مساعدة داخل الواجهات
  • .
  • كيفية استخدام الطرق الافتراضية والثابتة؟

جافا نسخ الرمز واجهة MyInterface { رسالة الطباعة الفارغة الافتراضية () { System.out.println("الطريقة الافتراضية في الواجهة!"); } ثابت باطلة staticMethod () { System.out.println("الطريقة الثابتة في الواجهة!"); } } تطبق فئة MyClass MyInterface {} MyClass obj = new MyClass(); obj.printMessage(); // الإخراج: الطريقة الافتراضية في الواجهة! MyInterface.staticMethod(); // الإخراج: طريقة ثابتة في الواجهة!

java
Copy code
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// Using Stream to filter and collect names
List filteredNames = names.stream()
                                  .filter(name -> name.startsWith("A"))
                                  .collect(Collectors.toList());

System.out.println(filteredNames);  // Output: [Alice]

فكر في

نظام المكونات الإضافية

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


Mastering Java n One Go: A Fun Ride to Functional Paradise القانون النهائي: دعوتك إلى العمل!

الآن بعد أن قمت باستكشاف الميزات الرئيسية لـ Java 8، حان الوقت

لتطبيق ما تعلمته

. سواء كنت تقوم ببناء خدمات صغيرة، أو أنظمة إدارة مستخدم، أو أي شيء بينهما، فإن Java 8 لديه الأدوات اللازمة لجعل التعليمات البرمجية الخاصة بك أكثر وضوحًا، وأسرع، وأكثر قابلية للصيانة. إذن، ما هي خطوتك التالية؟

ابدأ مشروعًا جديدًا

، أو أعد بناء مشروع قديم، أو قم بتجربة هذه الميزات في قاعدة التعليمات البرمجية الحالية لديك. لا تترك معرفتك خاملة فحسب، بل ضعها موضع التنفيذ!

Java 8 ليس مجرد ترقية، بل هو
تحول في العقلية

. إذا احتضنت هذه الميزات، فلن تعمل مشاريعك بشكل أفضل فحسب، بل سيكون الكود الخاص بك أسهل في الصيانة، وأكثر قابلية للتطوير، وجميلة فقط. إن عالم البرمجة الوظيفية يناديك، انطلق واجعل Java 8 صديقك المفضل الجديد. تعليمات سعيدة!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/wittedtech-by-harshit/mastering-java-8-in-one-go-a-fun-ride-to-functional-paradise-2g96?1إذا كان هناك أي التعدي، يرجى الاتصال بـ [email protected] للحذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3