অন্যান্য উত্তরগুলির মধ্যে অনেকগুলি কার্যকরী প্রোগ্রামিংয়ের পারফরম্যান্স (সমান্তরালতা) দিকে মনোনিবেশ করেছে, যা আমি বিশ্বাস করি যে এটি খুব গুরুত্বপূর্ণ। তবে, আপনি উত্পাদনশীলতা সম্পর্কে বিশেষত জিজ্ঞাসা করেছিলেন, যেমন হিসাবে, আপনি একটি অপরিহার্য দৃষ্টান্তের চেয়ে কার্যকরী দৃষ্টান্তে একই জিনিসটি আরও দ্রুত প্রোগ্রাম করতে পারেন?
আমি আসলে খুঁজে পেয়েছি (ব্যক্তিগত অভিজ্ঞতা থেকে) যে F # তে প্রোগ্রামিং আমার আরও ভালভাবে মনে হয় তার সাথে মেলে এবং তাই এটি আরও সহজ। আমি মনে করি এটিই সবচেয়ে বড় পার্থক্য। আমি এফ # এবং সি # উভয় ক্ষেত্রেই প্রোগ্রাম করেছি এবং এফ # তে "ভাষা নিয়ে লড়াই" করা অনেক কম, যা আমি ভালোবাসি। এফ # তে আপনাকে বিশদ সম্পর্কে চিন্তা করতে হবে না। আমি যা পেয়েছি তা সত্যই উপভোগ করেছি তার কয়েকটি উদাহরণ এখানে।
উদাহরণস্বরূপ, এফ # স্ট্যাটিকালি টাইপ করা থাকলেও (সমস্ত ধরণের সংকলন সময়ে সমাধান করা হয়), টাইপ অনুমানটি কী ধরণের আপনার রয়েছে তা নির্ধারণ করে, তাই আপনাকে এটি বলতে হবে না। এবং যদি এটি সনাক্ত করতে না পারে তবে এটি স্বয়ংক্রিয়ভাবে আপনার ফাংশন / শ্রেণি / যাই হোক না কেন জেনেরিক করে তোলে। সুতরাং আপনাকে কোনও জেনেরিক যাই লিখতে হবে তা সবই স্বয়ংক্রিয়। আমি এর অর্থ খুঁজে পেলাম যে আমি সমস্যাটি নিয়ে আরও বেশি সময় ব্যয় করছি এবং কীভাবে এটি বাস্তবায়ন করা যায়। আসলে, যখনই আমি সি # তে ফিরে আসি, আমি দেখতে পাই যে আমি এই ধরণের অনুমানটি সত্যিই মিস করছি, আপনি কখনই বুঝতে পারবেন না যে এটির আর আর করার দরকার নেই যতক্ষণ না এটি বিরক্তিকর।
এফ # তেও লুপ লেখার পরিবর্তে আপনি ফাংশনগুলিকে কল করেন। এটি একটি সূক্ষ্ম পরিবর্তন, তবে তাৎপর্যপূর্ণ, কারণ আপনাকে লুপের নির্মাণের বিষয়ে আর ভাবতে হবে না। উদাহরণস্বরূপ, এখানে কোডের একটি টুকরো যা কিছু দিয়ে যায় এবং কোনওটির সাথে মেলে (আমি কী মনে করতে পারি না, এটি একটি প্রকল্পের এলিউর ধাঁধা থেকে এসেছে):
let matchingFactors =
factors
|> Seq.filter (fun x -> largestPalindrome % x = 0)
|> Seq.map (fun x -> (x, largestPalindrome / x))
আমি বুঝতে পেরেছি যে সি # তে একটি মানচিত্র (প্রতিটি উপাদানের রূপান্তর) এর পরে ফিল্টার করা বেশ সহজ হবে, তবে আপনাকে নিম্ন স্তরে ভাবতে হবে। বিশেষত, আপনাকে লুপটি নিজেই লিখতে হবে এবং বিবৃতি এবং এই ধরণের জিনিস থাকলে আপনার নিজের স্পষ্ট থাকতে হবে। এফ # শিখার পরে, আমি বুঝতে পেরেছি যে কার্যকরী পদ্ধতিতে কোড করা সহজ হয়েছে, যেখানে আপনি যদি ফিল্টার করতে চান তবে আপনি "ফিল্টার" লিখেন এবং আপনি যদি মানচিত্র করতে চান, আপনি প্রয়োগের পরিবর্তে "মানচিত্র" লিখেন বিশদ প্রতিটি।
আমি |> অপারেটরটিকেও পছন্দ করি, যা আমি মনে করি এফ # কে অকামল এবং সম্ভবত অন্যান্য কার্যকরী ভাষা থেকে পৃথক করে। এটি পাইপ অপারেটর, এটি আপনাকে একটি এক্সপ্রেশনের আউটপুটটিকে "এক্সপাইজ" করতে দেয় অন্য অভিব্যক্তির ইনপুটটিতে। কোডটি আমি কীভাবে আরও বেশি মনে করি তা অনুসরণ করে। উপরের কোড স্নিপেটের মতো এটিও বলছে, "ফ্যাক্টর সিকোয়েন্সটি নিন, এটিকে ফিল্টার করুন, তারপরে এটি ম্যাপ করুন।" এটি একটি উচ্চ স্তরের চিন্তাভাবনা, যা আপনি অত্যাবশ্যক প্রোগ্রামিং ভাষায় পাবেন না কারণ আপনি লুপটি লেখার পক্ষে এবং বিবৃতিগুলি লেখার পক্ষে এতটাই ব্যস্ত। আমি যখনই অন্য ভাষায় যাই তখন এটিই আমি সবচেয়ে বেশি অনুভব করি।
সুতরাং সাধারণভাবে, যদিও আমি সি # এবং এফ # উভয় ক্ষেত্রেই প্রোগ্রাম করতে পারি, তবে এফ # ব্যবহার করা আমার পক্ষে সহজ মনে হয়েছে কারণ আপনি উচ্চতর স্তরে চিন্তা করতে পারেন। আমি যুক্তি দিয়ে বলব যেহেতু ছোট বিবরণগুলি ফাংশনাল প্রোগ্রামিং থেকে সরানো হয়েছে (কমপক্ষে এফ # তে), আমি আরও উত্পাদনশীল।
সম্পাদনা : আমি একটি মন্তব্যে দেখেছি যে আপনি একটি কার্যনির্বাহী প্রোগ্রামিং ভাষায় "রাষ্ট্র" এর উদাহরণ চেয়েছিলেন। F # অপরিহার্যভাবে লেখা যেতে পারে, সুতরাং আপনি কীভাবে এফ # তে পরিবর্তনীয় অবস্থা থাকতে পারেন তার প্রত্যক্ষ উদাহরণ এখানে:
let mutable x = 5
for i in 1..10 do
x <- x + i