আমি অ্যামাজন ডটকমের বইয়ের দোকানে ব্রাউজ করছি এবং আমি "জাভা ডেভেলপারদের জন্য ফাংশনাল প্রোগ্রামিং" বইটি পেয়েছি ।
আমি কিছু খুব বেসিক ফাংশনাল প্রোগ্রামিং জানি এবং 3 বছর ধরে জাভাতে প্রোগ্রামিং করছি।
আমি জানতে চাই যে ফাংশনাল প্রোগ্রামিং জাভাতেও সম্ভব?
আমি অ্যামাজন ডটকমের বইয়ের দোকানে ব্রাউজ করছি এবং আমি "জাভা ডেভেলপারদের জন্য ফাংশনাল প্রোগ্রামিং" বইটি পেয়েছি ।
আমি কিছু খুব বেসিক ফাংশনাল প্রোগ্রামিং জানি এবং 3 বছর ধরে জাভাতে প্রোগ্রামিং করছি।
আমি জানতে চাই যে ফাংশনাল প্রোগ্রামিং জাভাতেও সম্ভব?
উত্তর:
"ফাংশনাল প্রোগ্রামিং" এবং "সম্ভাব্য" দ্বারা আপনি কী বোঝাতে চান তা এটি নির্ভর করে।
কার্যত দৃষ্টান্ত অনুসরণ করে আপনি স্পষ্টতই জিনিসগুলি বাস্তবায়ন করতে পারেন। তবে জাভা ভাষা এটির জন্য সিনট্যাকটিক চিনি সরবরাহ করে না, তাই কিছু জিনিস সর্বোপরি ক্লান্তিকর হবে এবং কিছু অন্যান্য বিষয় চূড়ান্তভাবে তুচ্ছ হবে।
একইভাবে, আপনি সি-এর মতো অ-ওও হিসাবে স্বীকৃত কোনও ভাষায় অবজেক্ট-ওরিয়েন্টেড কোড লিখতে পারেন C.
এমন লাইব্রেরি রয়েছে যা ইতিমধ্যে আপনার জন্য লেগ ওয়ার্ক করে এবং তীরচিহ্নগুলি লুকিয়ে রেখে আপনাকে এটি করতে সহায়তা করতে পারে:
এটি আপনাকে জাফ কোডটি আরও কার্যকরী পদ্ধতির সাথে এবং সম্ভবত আরও পরিচিত সিনট্যাক্স এবং শব্দার্থবিজ্ঞান সহ লেখার অনুমতি দেবে, যেমনটি আপনি কোনও এফপি-সক্ষম ভাষা থেকে আশা করতে পারেন। কারণ মধ্যে, যে।
এবং স্পষ্টতই, আপনি জাভা শীর্ষে একটি কার্যকরী ভাষা প্রয়োগ করতে পারেন । যাতে আপনি সেইটিকে আপনার এফপি ভাষা হিসাবে ব্যবহার করতে পারেন। যা আপনি চেয়েছিলেন সে তুলনায় উচ্চতর স্তরের বিমূর্ততা, তবে তুলনামূলকভাবে প্রসঙ্গে (যদিও আমি এখানে কিছুটা প্রতারণা করছি, মঞ্জুর করেছি)।
উদাহরণস্বরূপ, চেক আউট:
যদিও আপনি যা চান ঠিক সেগুলি সেগুলি নাও থাকতে পারে, এমন আরও অনেকগুলি ভাষা রয়েছে যা জাভা প্ল্যাটফর্মে রেকর্ড করা হয়েছে এবং এটি আপনাকে জাভার তুলনামূলকভাবে মজাদার-ভিত্তিক (হ্যাঁ, পাং উদ্দেশ্যযুক্ত) প্রকৃতি থেকে মুক্তি দিতে পারে এবং ইতিমধ্যে আপনাকে আরও দেবে নমনীয়তা. JRuby , Jython এবং Rhino এর মতো উল্লেখযোগ্য প্রার্থী (যথাক্রমে রুবি , পাইথন এবং জাভাস্ক্রিপ্ট / ECMAScript এর জন্য ) কার্যকরী প্রোগ্রামিংয়ের জন্য আকর্ষণীয় সম্ভাবনাও সরবরাহ করে, যদিও তারা প্রকৃতপক্ষে প্রকৃতভাবে কার্যকরী প্রোগ্রামিং ভাষা নয়। জেটব্রেইনস কোটলিনএটি স্পষ্টভাবে স্বীকৃতি দেওয়ার সময় এটি একটি কার্যকরী ভাষা নয়, কিছু কার্যকরী গঠনকে সমর্থন করে এবং এটিও দেখার মতো।
আপনি এই নিবন্ধগুলি বা ভিডিওগুলি পড়তে বা দেখতে চাইতে পারেন:
আপনার উল্লিখিত বইটি পড়ছি। এটি সত্যিই ভাল বিটিডাব্লু।
হ্যাঁ জাভাতে এটি কার্যকর হতে পারে। আপনি কোন ডিগ্রীতে এটি অর্জন করতে পারবেন তা আমি জানি না তবে আপনি অনেকগুলি কার্যকরী প্রোগ্রামিং আইডিয়ামগুলি প্রয়োগ করতে পারেন।
সর্বাধিক গুরুত্বপূর্ণ বিষয়গুলির মধ্যে একটি "মানসিকতা পরিবর্তন করবেন না" মানসিকতার সাথে কোড করার চেষ্টা করা হচ্ছে।
উদাহরণস্বরূপ আপনি অপরিবর্তনীয়তা অর্জনের জন্য চূড়ান্ত কীওয়ার্ডটি ব্যবহার করেন। আপনি যদি কোনও ডেটা স্ট্রাকচার ব্যবহার করতে চলেছেন তবে আপনার অদলবদল স্ট্রাকচারগুলিতে কোড করা উচিত। গুগল পেয়ারা লাইব্রেরি ইতিমধ্যে এটি করছে।
সমবর্তী প্রোগ্রামিংয়ের জন্যও আপনি আক্কা কাঠামোর উপর নির্ভর করতে পারেন (অভিনেতার মডেল)।
এটি উল্লেখ করার মতো যে জেভিএম বাইটকোড টেল-কল অপটিমাইজেশন সমর্থন করে না (কমপক্ষে এখনও) ফাংশনাল প্রোগ্রামিং ভাষার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য।
হ্যাঁ, এটা স্পষ্টভাবে হয় সম্ভব এটি কোন টুরিং-সম্পূর্ণ ভাষা / সঞ্চালনের পরিবেশ একযোগে সম্ভব একই ভাবে। আপনি কী করছেন তা যদি আপনি জানেন তবে আপনি এটি বেশ ভাল পারফর্ম করতে পারেন get
যদিও এটি বোধগম্য তা নিশ্চিত নয়। বিশেষত, সচেতন থাকুন যে এটি বিশেষভাবে মূmatic় নয় (যেমন এটি দেখতে খুব অদ্ভুত লাগবে, আপনাকে কিছু অপ্রচলিত কাজ করতে হবে এবং নিয়মিত জাভাতে অভ্যস্ত মানুষকে বিভ্রান্ত করতে হবে)
আপনি কিছু বিজোড় বর্ণন কোডটি শেষ করবেন, যেমন একটি নতুন ফাংশন সংজ্ঞায়িত করতে:
Function twoStrings=new Function() {
public Object apply(Object param1) {
// do something to param1 and return a result
}
}
ক্রিয়ামূলক প্রোগ্রামিং করতে আপনার সাধারণত প্রয়োজন:
সুতরাং এটি একটি অনুশীলন এবং এমনকি একটি আকর্ষণীয় শখের প্রকল্প হিসাবেও সম্ভব। তবে আপনি জেভিএম / জাভা লাইব্রেরিগুলিতে অ্যাক্সেস করার সুবিধাগুলি বজায় রেখে গুরুতর ক্রিয়ামূলক প্রোগ্রামিং করতে চান তবে ক্লোজার আমার মতে আপনার সেরা বিকল্প।
পিএস যেহেতু ক্লজুরের কোরটি আসলে জাভাতে লেখা হয়েছে, এটি একটি দুর্দান্ত নতুন আধুনিক ভাষার বাক্য গঠনের পিছনে অগোছালো বিবরণ গোপন করার সময় জাভাতে কীভাবে কার্যকরী প্রোগ্রামিং করা যায় তার একটি খুব আকর্ষণীয় কেস উদাহরণ। যারা আগ্রহী তাদের ক্লোজার সোর্স কোডটি গিটহাবে রয়েছে ।
জাভাতে কিছুটা কার্যকর হতে পারে। এটি করা গুরুতরভাবে বেদনাদায়ক । পরিবর্তে
myList.each { doSomething(it); }
আপনার মত কিছু আছে:
myList.each(new Function() { public void do(Object arg) { something(); }})
এবং যদি আপনি প্রথম শ্রেণীর অবজেক্ট হিসাবে ক্লোজার এবং ফাংশন সহ সত্য ক্রিয়ামূলক প্রোগ্রামিং চান তবে অন্য একটি ভাষা চয়ন করুন। স্কালা, ক্লোজার, গ্রোভি সমস্তগুলি জেভিএম-এ চালিত হয় এবং উত্তরাধিকারী জাভা ক্লাসগুলির সাথে যোগাযোগ করতে পারে। ।
উত্তরটি হ'ল "হ্যাঁ, অবশ্যই", তবুও আমার মতে অনেক কার্যকরী ভাষার অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য হ'ল দুর্দান্ত টাইপ সিস্টেম। আপনি নিজে জাভাতে এটি পরিচালনা করতে পারবেন না।
আপনি যদি কার্যকরী প্রোগ্রামগুলি লিখতে চান এবং এখনও জেভিএমের সাথে থাকতে চান তবে আমি সাধারণ সন্দেহভাজনদের মধ্যে স্কেলা এবং ক্লোজারকে ফ্রেজের দিকে নজর দেওয়ার জন্য সুপারিশ করতে পারি । ফ্রেজে একটি সিনট্যাক্স এবং টাইপ সিস্টেম রয়েছে যা হাস্কেলের খুব কাছে, তবে প্রোগ্রামগুলি সরাসরি জাভা কোডে অনুবাদ করা হয় এবং অন্যান্য জাভা কোডের সাথে ইন্টারেক্ট করতে পারে।
ভাল, সব ধরণের জিনিসই সম্ভব। সিতে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং করা সম্ভব; এটা ঠিক খুব ভাল ধারণা নয়।
জাভা এফপির জন্য ডিজাইন করা হয়নি, তাই আপনি যদি খাঁটি-এফপি স্টাইলে সবকিছু করার চেষ্টা করছেন তবে আপনার সমস্যা হবে। আপনি ভাষাটির সাথে কাজ করার পরিবর্তে লড়াই করবেন। এবং কেবল ভাষা নয় - এছাড়াও রয়েছে দুর্দান্ত সমস্ত দুর্দান্ত জাভা লাইব্রেরি। সুতরাং খাঁটি এফপির জন্য যাবেন না; এফপির পিছনে কিছু ধারণাগুলি নিন এবং সেগুলি আপনার জাভা কোডের সাথে সংহত করুন, তবে বুঝতে পারেন যে আপনি সমস্ত ধারণাগুলিতে এটি করতে পারবেন না ।
আপনি ওপেনজেডিকে দল তাদের সর্বশেষ ওপেনজেডিকে 8 বাইনারিগুলি ডাউনলোড করতে এবং সংগ্রহগুলি এপিআইতে (অন্যদের মধ্যে) নতুন নতুন ল্যাম্বডা এক্সপ্রেশন এবং নতুন কার্যকরী আইডিয়মগুলি সহ খেলতে উত্সাহিত করেছেন। আপনি একটি পরিষ্কার কার্যকরী শৈলীতে প্রোগ্রাম করতে পারেন। দেখুন "কার্যকরী প্রোগ্রামিং জাভা?" জেভা কে 8 সংগ্রহের তুলনায় পেয়ারা, ফাংশনালজবা এবং ল্যাম্বডজে এর মতো পূর্ব জাভা 8 লিবের সাথে তুলনা করুন।
এটি সম্ভব বলে মনে হচ্ছে তবে এটি খাঁটি কার্যকরী প্রোগ্রামিং হবে না। এটি অত্যাবশ্যক প্রোগ্রামিংয়ের ফলাফল হতে পারে।
হাইলেমের দ্বারা বর্ণিত সম্ভাব্য কার্যকরী প্রোগ্রামিংয়ের অর্থ কেন তিনি জিজ্ঞাসা করছেন না । এটা এখানে:
"ফাংশনাল প্রোগ্রামিং" এবং "সম্ভাব্য" দ্বারা আপনি কী বোঝাতে চান তা এটি নির্ভর করে।
ক্রিয়ামূলক প্রোগ্রামিংয়ের বিভিন্ন সংজ্ঞা বা অর্থ থাকতে পারে না যদিও এর অনেক ব্যাখ্যা থাকতে পারে।
ওওপি-র মতো আমরা কি "ওওপি বলতে আপনার অর্থ কি?" জিজ্ঞাসা করতে পারি?
অবশ্যই অনেক ব্যাখ্যা থাকবে তবে এটি কেবলমাত্র একটি উদ্দেশ্য, ওওপি-র উদ্দেশ্য সম্পর্কিত হবে।
একই কার্যকরী প্রোগ্রামিং প্রযোজ্য ।
যখন আমরা ফাংশনাল অর্থ বলি প্রোগ্রামগুলিতে ফাংশন থাকে।
ফাংশনগুলির ভূমিকা হ'ল মূল্যায়ন যুক্তি / প্যারামিটার ফিরিয়ে আনা (আর্গুমেন্টটি ভেরিয়েবল হয় ফাংশনটি কল করার সময় উপস্থিত হয় এমন প্যারামিটারটি ভেরিয়েবল যা ফাংশন ঘোষণার অংশ)।
এছাড়াও একই আর্গুমেন্টগুলি পাস করার পরে ফাংশনগুলি সর্বদা একই ফল দেয়। এইভাবে বাগগুলি এড়াতে বা ভবিষ্যতের বাগগুলি ডিবাগ করা সহজ। ফাংশনাল প্রোগ্রামিং দ্বারা আমরা গ্লোবাল ভেরিয়েবল পরিবর্তন করার মতো পার্শ্ব প্রতিক্রিয়া এড়াতে পারি।
জাভাস্ক্রিপ্ট উদাহরণ:
function increment(lis){
return lis.map(
function (x){
return x+2;
}
);
}
var myList = [4, 7, 2, 3];
console.log(increment(myList));
console.log(myList);
ফাংশন ইনক্রিমেন্ট বস্তুর অভ্যন্তরের প্রতিটি উপাদানকে 1 টি মান যুক্ত করে ফলাফলটি ফেরত দেয়। মাইলিস্টের মান পরিবর্তন হয়নি তবে আমরা যখন ফাংশনগুলি কল করি তখন আমরা সেই অবজেক্টের উপাদানগুলিতে যুক্ত হওয়া মান দেখেছিলাম।
আমার প্রতিক্রিয়া হিসাবে জাভাতে কার্যকরী প্রোগ্রামিং সম্ভব? , আমি বিশ্বাস করি যে জাভাতে সত্যিকারের কার্যকরী প্রোগ্রামিং করা সম্ভব নয়। কারণ জাভা সত্যিই ওওপি হিসাবে তৈরি করা হয়েছে যাতে এটি অত্যাবশ্যক প্রোগ্রামিং প্রসারিত করে এবং রক্ষণাবেক্ষণের জন্য এটি উন্নত করে। যখন কোনও বস্তুর, পরিবর্তনশীল ইত্যাদির অবস্থা তখন বদলে যায়, এটি ইতিমধ্যে একটি অত্যাবশ্যক প্রোগ্রামিং।