আপনার মূল ভুলটি হ'ল আপনি এখনও আরও পদ্ধতিগত শর্তে ভাবেন। এটি ব্যক্তি হিসাবে আপনার সমালোচনা হিসাবে বোঝানো নয়, এটি নিছক একটি পর্যবেক্ষণ। আরও কার্যকরী শর্তে চিন্তাভাবনা সময় এবং অনুশীলনের সাথে আসে এবং সুতরাং পদ্ধতিগুলি সর্বত্র বিস্তৃত হয় এবং আপনাকে কল করার জন্য সবচেয়ে সুস্পষ্ট সঠিক জিনিসের মতো চেহারা পায়। আপনার গৌণ ভুলটি আপনার পদ্ধতির অভ্যন্তরে আপনার ptionচ্ছিক তৈরি করছে। Ptionচ্ছিকটি হ'ল ডকুমেন্টটিকে সহায়তা করার জন্য যা কোনও কিছু মান দেয় বা নাও পারে। আপনি কিছুই পাবেন না।
এটি আপনাকে নিখুঁতভাবে সুসংগত কোড লিখতে পরিচালিত করেছে যা পুরোপুরি যুক্তিসঙ্গত বলে মনে হয় তবে আপনি দুর্বল যোজন প্রলোভনগুলির দ্বারা প্রবৃত্ত হয়েছিলেন যা পেয়ে যায় এবং প্রকাশিত হয়।
অবশ্যই প্রশ্নটি "হয়ে ওঠে কেন এবং সেখানে উপস্থিত হয় কেন?"
এখানকার অনেক লোক যে জিনিসটি মিস করেন তা হ'ল ইজপ্রেসড () হ'ল এটি এমন কিছু নয় যা পুরোপুরিভাবে গোশত-ডার্ন লম্বা লম্বা কীভাবে এবং কীভাবে কার্যকরী জিনিস পছন্দ করে তা নিয়ে লোকেরা লিখেছেন নতুন কোডের জন্য।
তবে এটি আমাদের কয়েকটি (দুটি) ভাল, দুর্দান্ত, গ্ল্যামারাস (?) সুবিধা দেয়:
- এটি নতুন বৈশিষ্ট্যগুলি ব্যবহার করার জন্য উত্তরাধিকার কোডের উত্তরণকে সহজ করে।
- এটি ptionচ্ছিকের শেখার কার্ভগুলি সহজ করে।
প্রথমটি বরং সহজ।
কল্পনা করুন আপনার কাছে এমন একটি এপিআই রয়েছে যা দেখে মনে হচ্ছে:
public interface SnickersCounter {
/**
* Provides a proper count of how many snickers have been consumed in total.
*/
public SnickersCount howManySnickersHaveBeenEaten();
/**
* returns the last snickers eaten.<br>
* If no snickers have been eaten null is returned for contrived reasons.
*/
public Snickers lastConsumedSnickers();
}
এবং এটির মতো আপনার ব্যবহারের একটি উত্তরাধিকার শ্রেণি ছিল (শূন্যস্থান পূরণ করুন):
Snickers lastSnickers = snickersCounter.lastConsumedSnickers();
if(null == lastSnickers) {
throw new NoSuchSnickersException();
}
else {
consumer.giveDiabetes(lastSnickers);
}
নিশ্চিত হওয়ার একটি স্বতন্ত্র উদাহরণ example তবে এখানে আমার সাথে সহ্য করুন।
জাভা 8 এখন চালু হয়েছে এবং আমরা আরোহণের জন্য কাঁপছি। সুতরাং আমরা যা করি তার মধ্যে একটি হ'ল আমরা আমাদের পুরানো ইন্টারফেসটি এমন কিছু দিয়ে প্রতিস্থাপন করতে চাই যা ptionচ্ছিক ফিরে আসে। কেন? কারণ অন্য কেউ ইতিমধ্যে করুণাময়ভাবে উল্লেখ করেছেন: কিছু শূন্য হতে পারে কি না তা এই অনুমানের কাজটি
গ্রহণ করে
যা ইতিমধ্যে অন্যরা এটি নির্দেশ করেছে। তবে এখন আমাদের সমস্যা আছে। কল্পনা করুন যে আমাদের রয়েছে (আমি নির্দোষ পদ্ধতিতে Alt + F7 চাপার সময় আমাকে ক্ষমা করুন), 46 টি জায়গায় যেখানে এই পদ্ধতিটি ভাল পরীক্ষিত উত্তরাধিকার কোডে বলা হয় যা অন্যথায় একটি দুর্দান্ত কাজ করে। এখন আপনাকে এই সমস্ত আপডেট করতে হবে।
এটিই যেখানে ইজপ্রেসেট জ্বলজ্বল করে।
কারণ এখন: স্নিকার্স লাস্ট সনিকারস = স্নিকারসনকাউন্টার.লাস্টকনস্মস্নস্নেকারস (); যদি (নাল == সর্বশেষ স্নিকার্স) {নতুন নুশচনসনিকার্সেক্সপশন () নিক্ষেপ করুন; } অন্য {ভোক্তা। ডায়াবেটিস (সর্বশেষ স্নিকার্স); }
হয়ে:
Optional<Snickers> lastSnickers = snickersCounter.lastConsumedSnickers();
if(!lastSnickers.isPresent()) {
throw new NoSuchSnickersException();
}
else {
consumer.giveDiabetes(lastSnickers.get());
}
এবং এটি একটি নতুন পরিবর্তন আপনি নতুন জুনিয়রকে দিতে পারেন: তিনি দরকারী কিছু করতে পারেন এবং তিনি একই সাথে কোডবেস অন্বেষণ করতে পারবেন। জয়, জয়। সর্বোপরি, এই ধরণের সদৃশ কিছু হ'ল বেশ বিস্তৃত। এবং এখন আপনাকে ল্যাম্বডাস বা অন্য কিছু ব্যবহারের জন্য কোডটি পুনরায় লিখতে হবে না। (এই বিশেষ ক্ষেত্রে এটি তুচ্ছ হবে, তবে পাঠকদের কাছে অনুশীলন হিসাবে এটি কঠিন হতে পারে এমন উদাহরণগুলি আমি রেখেছি।)
লক্ষ্য করুন যে এর অর্থ হল যেভাবে আপনি এটি করেছিলেন তা মূলত ব্যয়বহুল লেখাগুলি না করেই উত্তরাধিকারের কোডটি মোকাবেলা করার একটি উপায়। সুতরাং নতুন কোড সম্পর্কে কি?
ভাল, আপনার ক্ষেত্রে যেখানে আপনি কেবল কিছু মুদ্রণ করতে চান, আপনি কেবল তা করতে চাইবেন:
। SnickersCounter.lastConsumedSnickers () ifPresent (System.out :: println);
যা বেশ সহজ এবং পুরোপুরি পরিষ্কার। যে বিন্দুটি আস্তে আস্তে তলদেশে চূড়ান্তভাবে ফুঁপিয়ে উঠছে তা হ'ল গেট () এবং ইস্প্রেসেট () এর জন্য ব্যবহারের কেস রয়েছে। এটি সম্পর্কে খুব বেশি চিন্তা না করে নতুন ধরণের ব্যবহারের জন্য আপনাকে বিদ্যমান কোডটি যান্ত্রিকভাবে সংশোধন করার জন্য রয়েছে। আপনি যা করছেন তাই নিম্নলিখিত উপায়গুলিতে বিপথগামী:
- আপনি এমন একটি পদ্ধতি কল করছেন যা শূন্য হতে পারে। সঠিক ধারণাটি হ'ল পদ্ধতিটি শূন্য হয়।
- ল্যাম্বদা ফ্যানসিটিযুক্ত স্বাদযুক্ত নতুন পদ্ধতি ব্যবহারের পরিবর্তে আপনি এই alচ্ছিকটি মোকাবেলা করার জন্য উত্তরাধিকার বান্দাইড পদ্ধতি ব্যবহার করছেন।
আপনি যদি একটি সাধারণ নাল-সুরক্ষা চেক হিসাবে ptionচ্ছিক ব্যবহার করতে চান তবে আপনার যা করা উচিত তা কেবল এটি:
new Optional.ofNullable(employeeServive.getEmployee())
.map(Employee::getId)
.ifPresent(System.out::println);
অবশ্যই, এটির মতো দেখতে সুন্দর সংস্করণটি:
employeeService.getEmployee()
.map(Employee::getId)
.ifPresent(System.out::println);
যাইহোক, এটি কোনও উপায়ে প্রয়োজন না হওয়ার পরেও আমি অপারেশন অনুযায়ী একটি নতুন লাইন ব্যবহার করার পরামর্শ দিচ্ছি, যাতে এটি পড়া সহজ হয়। সপ্তাহের যে কোনও দিন প্রহারকে সংক্ষিপ্ত করে পড়তে ও বুঝতে সহজ।
এটি অবশ্যই একটি খুব সহজ উদাহরণ যেখানে আমরা যা করার চেষ্টা করছি তার সমস্ত কিছুই বোঝা সহজ। বাস্তব জীবনে এটি সর্বদা সহজ নয়। তবে লক্ষ্য করুন কীভাবে এই উদাহরণে আমরা যা প্রকাশ করছি তা আমাদের উদ্দেশ্য। আমরা কর্মচারীকে পেতে, তার আইডি পেতে, এবং সম্ভব হলে এটি মুদ্রণ করতে চাই। এটি bigচ্ছিকের সাথে দ্বিতীয় বড় জয়। এটি আমাদের পরিষ্কার কোড তৈরি করতে দেয়। আমি এটিও মনে করি যে এমন একটি পদ্ধতি তৈরি করা যা এমন কিছু জিনিস তৈরি করে যা আপনি একটি মানচিত্রে এটিকে খাওয়াতে পারেন এটি সাধারণভাবে একটি ভাল ধারণা।