যতদূর আমি জানি, কেবল দুটি ধরণের ক্রিয়া রয়েছে, ধ্বংসাত্মক এবং গঠনমূলক।
গঠনমূলক ক্রিয়াকলাপ হিসাবে, নামটি বোঝা যায়, কিছু তৈরি করে, একটি ধ্বংসাত্মক কিছু ধ্বংস করে, তবে আপনি এখন যেভাবে ভাবেন সেভাবে নয়।
উদাহরণস্বরূপ, ফাংশন
Function<Integer,Integer> f = (x,y) -> x + y
একটি গঠনমূলক এক। আপনার যেমন কিছু নির্মাণ করা দরকার। উদাহরণস্বরূপ আপনি টিপলটি তৈরি করেছেন (x, y) । গঠনমূলক ফাংশনগুলির সমস্যা রয়েছে, অসীম যুক্তিগুলি পরিচালনা করতে না পারা। তবে সবচেয়ে খারাপটি হল, আপনি কেবল একটি যুক্তি খোলা রাখতে পারবেন না। আপনি কেবল "ভাল, x: = 1" বলতে পারবেন না এবং আপনি চেষ্টা করতে পারেন এমন প্রতিটি y চেষ্টা করে দেখতে পারেন। আপনাকে প্রতিবার পুরো টিপলটি তৈরি করতে হবে
x := 1
। সুতরাং আপনি যা ফাংশন আসতে দেখতে চাই যদি y := 1, y := 2, y := 3
আপনি লিখতে আছে f(1,1) , f(1,2) , f(1,3)
।
জাভা 8-তে, পদ্ধতিগত উল্লেখগুলি ব্যবহার করে গঠনমূলক ফাংশনগুলি পরিচালনা করা উচিত (কারণ বেশিরভাগ সময়) গঠনমূলক ল্যাম্বডা ফাংশনটি ব্যবহার করার খুব বেশি সুবিধা নেই। এগুলি কিছুটা স্থির পদ্ধতির মতো। আপনি এগুলি ব্যবহার করতে পারেন, তবে তাদের বাস্তব অবস্থা নেই।
অন্য প্রকারটি হ'ল ধ্বংসাত্মক, এটি কিছু নেয় এবং এটি যতদূর প্রয়োজন তা ভেঙে দেয়। উদাহরণস্বরূপ, ধ্বংসাত্মক ফাংশন
Function<Integer, Function<Integer, Integer>> g = x -> (y -> x + y)
f
গঠনমূলক ছিল যা ফাংশন হিসাবে একই কাজ করে । একটি ধ্বংসাত্মক কার্যকারিতার সুবিধাগুলি হ'ল, আপনি এখন অসীম যুক্তিগুলি পরিচালনা করতে পারেন যা স্ট্রিমগুলির জন্য বিশেষত সুবিধাজনক এবং আপনি কেবল যুক্তিগুলি খোলা রাখতে পারেন। যদি আপনি আবার দেখতে এর ফল কী যদি মত হবে চান তাই x := 1
এবং y := 1 , y := 2 , y := 3
, আপনি বলতে পারেন h = g(1)
এবং
h(1)
জন্য ফল y := 1
, h(2)
জন্য y := 2
এবং h(3)
জন্য y := 3
।
সুতরাং এখানে আপনার একটি স্থির রাষ্ট্র আছে! এটি বেশ গতিময় এবং এটি বেশিরভাগ সময় যে আমরা একটি ল্যাম্বডা থেকে চাই।
কারখানার মতো প্যাটার্নগুলি অনেক সহজ যদি আপনি কেবল একটি ফাংশন রাখতে পারেন যা আপনার জন্য কাজ করে।
ধ্বংসাত্মকগুলি একে অপরের সাথে সহজেই মিলিত হয়। টাইপটি সঠিক হলে আপনি নিজের পছন্দ মতো এগুলি রচনা করতে পারেন। এটি ব্যবহার করে আপনি সহজেই মরফিজমগুলি সংজ্ঞায়িত করতে পারেন যা পরীক্ষার (অপরিবর্তনীয় মানের সাথে) অনেক সহজ করে তোলে!
আপনি এটিও একটি গঠনমূলক দিয়ে করতে পারেন, তবে ধ্বংসাত্মক রচনাটি দেখতে দেখতে সুন্দর এবং আরও ভাল একটি তালিকা বা সাজসজ্জারের মতো এবং গঠনমূলকটি দেখতে অনেকটা গাছের মতো লাগে। এবং গঠনমূলক ফাংশনগুলির সাথে ব্যাকট্র্যাকিংয়ের মতো জিনিসগুলি খুব সুন্দর নয়। আপনি কেবল একটি ধ্বংসাত্মক (আঞ্চলিক প্রোগ্রামিং) এর আংশিক ফাংশনগুলি সংরক্ষণ করতে পারেন এবং "ব্যাকট্র্যাক" এ কেবল পুরানো ধ্বংসাত্মক ফাংশনটি ব্যবহার করতে পারেন। এটি কোডটিকে অনেক ছোট এবং আরও ভাল পাঠযোগ্য করে তোলে। গঠনমূলক ফাংশনগুলির সাথে আপনার সমস্ত যুক্তি কমবেশি মনে রাখতে হবে যা অনেক বেশি হতে পারে।
তাহলে কেন প্রয়োজন BiFunction
নেই তার চেয়ে বেশি প্রশ্ন হওয়া উচিত কেন TriFunction
?
প্রথমত, প্রচুর সময় আপনার মাত্র কয়েকটি মান (3 এর কম) থাকে এবং তার জন্য কেবল একটি ফলাফল প্রয়োজন, যাতে একটি সাধারণ ধ্বংসাত্মক কার্যকারিতা মোটেই প্রয়োজন হয় না, একটি গঠনমূলক জরিমানা করে। এবং মনদেদের মতো জিনিস রয়েছে যা সত্যই একটি গঠনমূলক ফাংশন প্রয়োজন। তবে সেগুলি বাদ দিয়ে আসলে খুব একটা ভালো কারণ নেই যে কেন একেবারেই আছে BiFunction
। যার অর্থ এইটি সরানো উচিত নয়! আমি মারা না যাওয়া পর্যন্ত আমি আমার মনাদাদের জন্য লড়াই করি!
সুতরাং আপনার যদি অনেক যুক্তি থাকে, যা আপনি একটি যৌক্তিক ধারক শ্রেণীর সাথে একত্রিত করতে পারবেন না এবং যদি আপনার ফাংশনটি গঠনমূলক হওয়ার প্রয়োজন হয় তবে একটি পদ্ধতি রেফারেন্স ব্যবহার করুন। অন্যথায় ধ্বংসাত্মক ফাংশনগুলির নতুন অর্জিত ক্ষমতা ব্যবহার করার চেষ্টা করুন, আপনি নিজেকে অনেক কম কোড লাইনের সাহায্যে অনেক কিছু করতে দেখবেন।