এখানে মন্তব্য আলোচনার ফলস্বরূপ , আমি ভাবছি আপনি সি তে ফাংশনাল প্রোগ্রামিং শিখতে পারবেন কিনা?
এখানে মন্তব্য আলোচনার ফলস্বরূপ , আমি ভাবছি আপনি সি তে ফাংশনাল প্রোগ্রামিং শিখতে পারবেন কিনা?
উত্তর:
একথাও ঠিক যে আপনি পারেন না সি তত্ত্ব কার্মিক প্রোগ্রামিং, আপনিও যা করতে পারেন শিখতে সি কার্যকরী প্রোগ্রামিং নীতি, কিন্তু ভাষা সহজে দেখা যায় না।
আমি ধরে নিই যে OOP তে আপনার কমপক্ষে কিছুটা পটভূমি রয়েছে; যদি আপনি এটি করেন তবে আপনার সচেতন হওয়া উচিত যে বহুকর্ম, গিটার / সেটটার্স, দৃশ্যমানতার বিধি ইত্যাদি C সি সহ ওওপি করা যেতে পারে তবে এটি করা মোটামুটি বেদনাদায়ক এবং আপনার ওওপি এবং সি উভয়ই জানতে হবে- এটি টানতে বাইরে। এটি এফপির সাথে অনেকটা একই।
আপনার প্রথমে যা করা উচিত তা হ'ল প্রথমে একটি কার্যকরী প্রোগ্রামিংয়ের ভাষা শিখুন (তাদের বেশিরভাগেরই আশ্চর্যরকম সরল বাক্য গঠন রয়েছে; এটি এমন সিনট্যাক্স নয় যা তাদের শেখা কঠিন করে তোলে) এবং তারপরে আপনার নতুন-অর্জিত জ্ঞানকে আপনি সি লিখার পদ্ধতিতে প্রভাবিত করুন let
অনুরোধ অনুসারে, আপনি কয়েকটি জিনিস এফপি থেকে শিখতে পারেন এবং তারপরে, সি, সি ++ বা জাভা প্রয়োগ করতে পারেন:
কিছু কার্যকরী ধারণা দেওয়ার জন্য সি হ্যাক করা যেতে পারে:
এই স্ট্যাকওভারফ্লো প্রশ্ন আপনাকে আরও বলবে। তবে যদিও সি, হ্যাকস এবং সংকলক এক্সটেনশনগুলি এবং যে কোনও ধারণাটি শেখার সেরা উপায় নয় যা কার্যকরী প্রোগ্রামিং (বা একটি বৃহত উপসেট) করা সম্ভব বলে মনে হচ্ছে।
আসলে করার শিখতে আপনার সেরা বাজি প্রোগ্রামিং কার্মিক মত বিশিষ্ট কার্যকরী প্রোগ্রামিং ভাষা এক পাতার মর্মর এবং তার উপভাষা ( Clojure , স্কিম ), Erlang এবং Haskell, । এর মধ্যে যে কোনও একটি হ'ল নিখুঁত সরঞ্জাম যা কার্যকরী প্রোগ্রামিং মানসিকতার মধ্যে কাজ করে। আপনার যদি নেট নেট ব্যাকগ্রাউন্ড থাকে তবে এফ # ভাল প্রার্থী, তবে এটি একটি বহু উদাহরণের ভাষা, কঠোরভাবে কার্যকরী প্রোগ্রামিং ভাষা নয়।
হিসাবে tmadmers মন্তব্য মন্তব্য:
আসলে, এলআইএসপি, ক্লোজার এবং স্কিমগুলিও বহু-দৃষ্টান্ত; হাস্কেল, খাঁটি এবং ডিফল্ট-অলস হওয়ার সময়, একাকী প্রাসঙ্গিক অবস্থার মধ্যেও অত্যাবশ্যক প্রোগ্রামিংয়ের অনুমতি দেয় এবং এতে সমবর্তী প্রক্রিয়াজাতকরণের জন্য বিস্তৃত সমর্থন রয়েছে। এগুলির সকলেরই এমন ব্যবস্থা আছে যা ওওপি বিশ্বের জড়িত জ্ঞানের বৃহত অংশগুলি প্রয়োগ করে - এনক্যাপসুলেশন, উত্তরাধিকার, একক-দায়বদ্ধতা, রচনা ইত্যাদি It's এটি কোনও ভাষা অন্য দৃষ্টান্তগুলিকে অনুমতি দেয় কিনা সে সম্পর্কে এতটা নয়; এটিই কোন দৃষ্টান্তটি কোনও ভাষার সূচনা পয়েন্ট গঠন করে।
আমার জ্ঞানের সর্বোপরি লিসপ এবং এর উপভাষাগুলি এবং এরলং এফ # এর চেয়ে ভাল প্রার্থী কারণ তারা অন্যান্য দৃষ্টান্তগুলিতে ফাংশনাল প্রোগ্রামিংকে উত্সাহিত করে, যে টিডামাররা ভাষার সূচনালগ্ন হিসাবে সুন্দর করে বলেছিল । এফ # কার্যকরী প্রোগ্রামিংকে অন্তর্ভুক্ত করে তবে এটির অন্যান্য সমর্থিত দৃষ্টান্ত, অপরিহার্য এবং ওও প্রোগ্রামিংয়ের তুলনায় উত্সাহ দেয় না।
আপনি সি তে ক্রিয়ামূলক প্রোগ্রামিংয়ের সমস্ত দিক শিখতে পারবেন না তবে অবশ্যই আপনি যে কোনও অপরিহার্য ভাষা দিয়ে ফাংশনাল স্টাইল প্রোগ্রামিং শুরু করতে পারেন। এই প্রারম্ভিক বিটগুলি হ'ল "প্রোগ্রামিংয়ের সময় কীভাবে জিনিস খাঁটি রাখতে হয়।" এবং এটি সিও করা যেতে পারে। বিশদ জন্য এই ব্লগ পোস্ট চেক করুন-
http://www.johndcook.com/blog/2011/07/24/get-started-functional-programming/
কার্যকরী প্রোগ্রামিং বন্ধ এবং তাদের অ্যাপ্লিকেশন সম্পর্কে। যদি না কেউ আপনাকে সি-র জন্য একটি অবতরণ ক্লোজার লাইব্রেরি দেখাতে সক্ষম করে, কার্যকরী প্রোগ্রামিং শিখতে সি ব্যবহার করা ভুলে যান।
ক্রিয়ামূলক প্রোগ্রামিং অঙ্কবাচক ধারণার ধারণা বন্ধ যা মোটামুটিভাবে ভাষী, ভেরিয়েবল বাইন্ডিং সঙ্গে একটি ফাংশন একসঙ্গে ধারন করে না। ক্লোজারগুলির বিস্তৃত ব্যবহারের পাশাপাশি ক্রিয়াকলাপের প্রোগ্রামিংয়ে আরও কয়েকটি স্বতন্ত্র বৈশিষ্ট্য রয়েছে যেমন পুনরাবৃত্ত ফাংশন এবং পরিবর্তনহীন মান ব্যবহার (উভয়ই একসাথে ভাল খেলে)। এই বৈশিষ্ট্যগুলি অন্য যে কোনও কিছুর চেয়ে সাংস্কৃতিক সমস্যা, এবং কার্যত কোনও ভাষায় এগুলি ব্যবহারে কোনও প্রযুক্তিগত বাধা নেই, এ কারণেই আমি আমার উত্তরে ক্লোজারগুলিতে মনোনিবেশ করি: প্রতিটি ভাষা সহজেই সমাধি তৈরি করতে দেয় না।
ক্লোজারগুলির একটি সাধারণ ব্যবহার হ'ল গোপনীয়তা পদ্ধতির প্রয়োগ। উদাহরণস্বরূপ জাভাস্ক্রিপ্ট কোড - উদাহরণগুলিতে আমি জাভাস্ক্রিপ্টটি বেছে নিয়েছি কারণ এটি একটি তথাকথিত "সি-এর মতো সিনট্যাক্স" সহ একটি কার্যকরী ভাষা এবং আপনার প্রশ্ন থেকেই বোঝা যায় যে আপনি সি এর সাথে পরিচিত:
create_counter = function()
{
var x = 0;
var counter = function()
{
++x;
return x;
};
return counter;
}
তারপরে
a = create_counter();
b = create_counter();
আমাদের দুটি ফাংশন a
এবং b
গণনা বিরক্তি সংগ্রহ have উদাহরণের বিষয়টি হ'ল ভেরিয়েবলগুলি ক্লোজারটি ক্লোজারটিকে x
সংজ্ঞায়িত করে counter
এবং প্রতিবার একটি নতুন counter
ক্লোজার is instantiated by the function, it gets its fresh own idea of what
x` হয় captured
ক্লোজারগুলির আরেকটি সাধারণ ব্যবহার হ'ল ফাংশনগুলির আংশিক প্রয়োগের সংজ্ঞা। ধরে নিন যে আমাদের syslog
কোনও ফাংশন বাস্তবায়নের অনুরূপ একটি প্রতিবেদন করার সুবিধা রয়েছে
var log = function(priority, message) {
…
};
যেখানে আর্গুমেন্ট priority
এবং message
স্ট্রিং হবে বলে আশা করা যায়, প্রথম এক এক হচ্ছে "debug"
, "info"
, ইত্যাদি। আমরা এই জাতীয় লগ কারখানাটি সংজ্ঞায়িত করতে পারি:
var logWithPriority = function(priority) {
return function(message) {
log(priority, message);
};
};
এবং আমাদের লগ সুবিধার বিশেষায়িত সংস্করণগুলি সংজ্ঞায়িত করতে এটি ব্যবহার করুন:
var debug = logWithPriority("debug");
var info = logWithPriority("info");
…
এটি খুব দরকারী, কারণ ত্রুটি-প্রবণ- for
লুপগুলি লেখার পরিবর্তে
for(i = 0; i < journal.length; ++i) {
log("info", journal[i]);
}
আমরা ক্লিনার, খাটো এবং অতিশয় সরল (সেখানে নেই লিখতে পারেন i
, যে অনেক ভাল):
journal.forEach(logWithPriority("info"));
ক্লোজারগুলির একটি তৃতীয় গুরুত্বপূর্ণ অ্যাপ্লিকেশন ক্ষেত্র হ'ল অলস মূল্যায়নের প্রয়োগ - নোট করুন যে বিশেষ ভাষা সমর্থন আরও ভাল বাস্তবায়নের জন্য সরবরাহ করতে পারে।
একটি অলস ফাংশন, একটি সরাসরি গণনা সম্পাদনের পরিবর্তে, একটি সমাধির ফেরত দেয় যা প্রশ্নটি সম্পাদন করতে বলা যেতে পারে (বা আলস্যতার জেরে "বাধ্য")। এটি করার অনুপ্রেরণা হ'ল এটি একটি গণনা প্রস্তুত এবং একটি গণনা সম্পাদনকে পৃথক করে। এর একটি ব্যবহারিক উদাহরণ নিয়মিত প্রকাশের সংকলন: কোনও প্রোগ্রাম যদি স্টার্টআপ-সময়ে প্রচুর নিয়মিত অভিব্যক্তি সংকলন করে তবে এটি শুরু করতে অনেক সময় প্রয়োজন। পরিবর্তে যদি আমরা অলসভাবে নিয়মিত প্রকাশগুলি সংকলন করি এবং তাদের আমাদের যেমন প্রয়োজন তেমন জোর করে রাখি তবে আমাদের প্রোগ্রামটি দ্রুত শুরু হতে পারে। অবশ্যই, নিয়মিত-এক্সপ্রেশনগুলি এখানে পর্যাপ্ত আরম্ভের সময় প্রয়োজন এমন কোনও কাঠামোর সাথে প্রতিস্থাপিত হতে পারে।
ক্লোজারগুলির সাথে কীভাবে অলস মূল্যায়ন কার্যকর করা যায় তা এখানে। অ্যারেতে সর্বোচ্চ ফিরিয়ে দেওয়া অ্যারেম্যাক্স ফাংশনের শাস্ত্রীয় বাস্তবায়ন বিবেচনা করুন :
function arrayMax(array) {
return array.reduce(function(a, b) {
return Math.min(a, b);
};
}
অলস রূপটি হবে:
function arrayMax(array) {
var memo = null;
function actuallyCompute() {
if(memo === null) {
memo = array.reduce(function(a, b) {
return Math.min(a, b);
});
}
return memo;
}
return actuallyCompute;
}
প্রত্যাবর্তিত মান হ'ল একটি ক্লোজার যা ইতিমধ্যে গণনা করা হয় তবে মানটি গণনা করতে বা অন্য সময় পুনরুদ্ধার করতে ব্যবহার করা যেতে পারে।
এই তিনটি উদাহরণের সাথে আমাদের আত্মবিশ্বাস থাকা উচিত যে ক্লোজার এবং তাদের অ্যাপ্লিকেশনগুলি কার্যকরী প্রোগ্রামিংয়ের মূল বিষয়।
ফাংশনাল প্রোগ্রামিং শেখার অর্থ ক্লোজারগুলির সাথে কীভাবে প্রোগ্রাম করা যায় তা শেখা। ফলস্বরূপ, কার্যকরী প্রোগ্রামিং অধ্যয়ন করার জন্য কোনও ভাষা অনুসন্ধান করার সময়, বন্ধগুলির সহজে কারসাজির অনুমতি দেওয়া ভাষা এবং বিশেষত ফাংশনগুলির আংশিক প্রয়োগকে বিবেচনা করা উচিত। বিপরীতভাবে, যে ভাষাগুলিতে ক্লোজারগুলি সহজেই পরিচালনা করা যায় না সেগুলি হ'ল দুর্বল পছন্দ।
আমি মনে করি আপনি যে সরঞ্জামগুলি ব্যবহার করেন সেগুলি আপনার শেখার উপর অনেক প্রভাব ফেলে। প্রোগ্রামিং ধারণাগুলি শেখা প্রায় অসম্ভব যার জন্য আপনি যে প্রোগ্রামিং ভাষা ব্যবহার করেন তা ব্যবহারের উপায় সরবরাহ করে না। অবশ্যই, আপনি সর্বদা কয়েকটি জিনিস শিখতে পারেন তবে আপনি এটি সঠিকভাবে শিখতে পারবেন না।
কিন্তু যে একাডেমিক যাহাই হউক না কেন, কারণ হিসেবে Martinho তার মন্তব্যে বলেছেন , এমনকি যদি আপনি পারে কার্মিক প্রোগ্রামিং শিখতে, আপনি উচিত কারণ ভাষা এই হল যেখানে যে কাজ করতে চেষ্টা করবেন, অনেক সহজ।
আপনার সি তে ক্রিয়ামূলক প্রোগ্রামিং শিখানো উচিত নয়, তবে কঠোর কার্যকরী ভাষায় (হাস্কেল, ক্যামেল, এরলং, ইত্যাদি)।
আপনি যদি কার্যক্ষমে নতুন হন তবে আপনি কখনই এটি অ-কার্যকরী ভাষার সাথে পাবেন না। আরও সম্ভবত, আপনি নিজেকে ফাংশনাল প্রোগ্রামিং বলে মনে করেন তা করতে প্রশিক্ষণ দেবেন এবং জিনিসগুলি ভুল উপায়ে শিখবেন। এবং জিনিসগুলি প্রথমে সঠিক উপায়ে শেখার চেয়ে সঠিক উপায়ে le পুনরায় শেখানো always আরও শক্ত।
যাইহোক, আমি মনে করি সিতে ফাংশনাল করা এমন কারও জন্য ভাল অনুশীলন যা ইতিমধ্যে কার্যকরী জানেন। কারণ সেই ব্যক্তিটি শিখবে হুডের পিছনে কী চলছে - কম্পিউটারটি আসলে কী করছে।