التنقل بأمان بين سلاسل مكالمات "الحصول على" المعرضة للصفر
في قواعد التعليمات البرمجية المعقدة، يمكن أن يصبح تسلسل مكالمات "الحصول" المتعددة أرضًا خصبة بالنسبة إلى NullPointerExceptions. للحماية من القيم الخالية المحتملة، غالبًا ما يلجأ المطورون إلى عمليات فحص فارغة مطولة لكل كائن وسيط.
ولكن هل هناك طريقة أكثر أناقة وكفاءة للتعامل مع مثل هذه السيناريوهات؟
السلاسل الاختيارية
مع فئة Java 8 الاختيارية، لدينا حل أنيق يعرف بالسلاسل الاختيارية. يتيح لنا التغليف الاختياري التعامل مع القيم الخالية بأمان عن طريق إرجاع قيمة اختيارية
تتيح لك السلاسل الاختيارية تنفيذ سلسلة من مكالمات الحصول بسلاسة، وتعيين كل منها إلى قيمة اختيارية. يتم التعامل مع عمليات التحقق الخالية داخليًا، مما يضمن تنفيذ العمليات اللاحقة فقط إذا أعادت العمليات السابقة قيمًا غير فارغة.
على سبيل المثال، ضع في اعتبارك السلسلة التالية من استدعاءات "الحصول على":
house. getFloor(0).getWall(WEST).getDoor().getDoorknob();
لتجنب NullPointerExceptions، يمكنك استخدام عمليات التحقق الخالية التالية:
if (house != null && house.getFloor(0) != null && house.getFloor(0).getWall(WEST) != null && house.getFloor(0).getWall(WEST).getDoor() != null) ...
ومع ذلك، باستخدام السلاسل الاختيارية، يمكنك تبسيط ذلك إلى:
Optional.ofNullable(house) .map(h -> h.getFloor(0)) .map(floor -> floor.getWall(WEST)) .map(wall -> wall.getDoor()) .map(door -> door.getDoorknob());
نموذج الاستخدام
دعونا نوضح قوة السلاسل الاختيارية بمثال:
System.out.println("----- Not Initialized! -----"); Optional.ofNullable(new Outer()) ... // Omitted chain of optional maps .ifPresent(foo -> System.out.println("foo: " foo)); //no print System.out.println("----- Let's Initialize! -----"); Optional.ofNullable(new OuterInit()) ... // Omitted chain of optional maps .ifPresent(foo -> System.out.println("foo: " foo)); //will print!
في هذا المثال، عند تهيئة الكائنات، تتعامل السلسلة الاختيارية مع القيم الخالية بأمان، مما يؤدي إلى طباعة ناجحة. بدون السلاسل الاختيارية، كان من الممكن أن يحدث NullPointerException.
لا تعمل السلاسل الاختيارية على تبسيط التعامل مع القيم الفارغة فحسب، بل تعمل أيضًا على تحسين إمكانية قراءة التعليمات البرمجية وقابلية صيانتها. من خلال الاستفادة من الاختياري
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3