ফাংশনাল প্রোগ্রামিং কোডে জটিলতা যুক্ত করে? [বন্ধ]


17

পুরো গত বছর ধরে আমি স্কালা কোড লিখেছি (জাভা ব্যাকগ্রাউন্ড থেকে আসছে)। আমি কীভাবে ভ্যালস, কেস ক্লাস, মানচিত্র / ফিল্টার / ল্যাম্বদা ফাংশন, ফলস্বরূপ এবং প্রকার অনুমান সহ সহজ এবং ক্লিনার কোড তৈরি করতে পারি তা আমি সত্যিই পছন্দ করেছি। আমি এটি বেশিরভাগ আক্কা ভিত্তিক অ্যাপ্লিকেশনের জন্য ব্যবহার করেছি ।

এই বছর আমি একটি নতুন দল নিয়ে স্কেল প্রকল্পে আছি, যিনি সত্যই কার্যকরী প্রোগ্রামিং পছন্দ করেন। তারা স্কালাজকে প্রচুর পরিমাণে ব্যবহার করে এবং কোডটি সর্বত্র আবেদনকারী, প্রসঙ্গের সীমা, পাঠক / লেখক / রাষ্ট্রের মোনাড দিয়ে পূর্ণ হয়, এমনকি মূল পদ্ধতিটি আই / ও মোনাডে "মোড়ানো" থাকে। তাদের যুক্তি হ'ল কোডটি সঠিক কিনা তা বোঝাতে কম্পাইলারটি "আমাদের জন্য কাজ করে" তোলে এবং প্রতিটি ফাংশন পার্শ্ব প্রতিক্রিয়া থেকে মুক্ত।

তবুও, আমার দৃষ্টিকোণ থেকে এই সমস্ত সিনট্যাক্সটি সত্যই ব্যবসায়ের যুক্তি দিয়ে চলেছে। উদাহরণস্বরূপ, "মাই বিজনেসঅবজেক্ট" এর একটি ধরণ ঠিক আছে, পাশাপাশি "তালিকা [মাই বিজনেসঅবজেক্ট]", "অপশন [মাইবাসনেস অবজেক্ট]" বা "ফিউচার [মাই বিজনেসঅবজেক্ট]" এর মতো প্রকারগুলিও রয়েছে। এঁদের সবারই স্পষ্ট অর্থ এবং উদ্দেশ্য রয়েছে। অন্যদিকে কোডগুলি:

def method[M[_]: Applicative] = {
  case (a, b) => (ca[M](a) |@| cb[M](b)) {
    case t @ (ra, rb) =>
      if (ra.result && rb.result) t.right
      else t.left
  }
}

এটি কি প্রোগ্রামে জটিলতা যুক্ত করে, বা আমি কেবল প্রোগ্রামিংয়ের এই পদ্ধতিতে অভ্যস্ত নই?


6
আপনার উদ্দেশ্যমূলক উত্তর প্রশ্ন কি?
হরিণ হান্টার

1
দেখে মনে হচ্ছে এটি এক বা দুটি বর্ণের পরিবর্তনশীল নাম সহ এক টন কোডের দিকে নিয়ে যায়। দেখতে কিছুটা এপিএল লাগছে। এটি পরিপূরক নয়।
user949300

3
আমি গত বছর হাস্কেলের সাথে খেলা শুরু করেছি। এটি তখন অবিশ্বাস্যরকম জটিল মনে হয়েছিল, যখন আমি কারিঙ, ফান্টেক্টর, মোনাডস ইত্যাদির মত ধারণাগুলি বুঝতে পারি না। হাস্কেল স্কালাজের সাথে সমান যে এর অনেকগুলি সংক্ষিপ্ত, প্রতীকী কার্য রয়েছে যেমন, >>=এবং <$>যার অর্থ আপনার অবধি কিছুই না তারা কি জানি। তাদের অর্থ কী তা শিখার পরে, তারা এখন খুব স্বাভাবিকভাবে এবং দ্রুত আমার কাছে পড়েন। আসলেই কোনও উত্তর নয়, এই জাতীয় জিনিসগুলির সাথে কেবল আমার উদ্দেশ্য অভিজ্ঞতা। আমি স্কালাকেও ব্যবহার করি তবে স্কালাজ লাইব্রেরির সাথে কোনও অভিজ্ঞতা নেই।
কেচালাক্স

3
আপনি মূর্খতাগুলির সাথে কেবল অপরিচিত। @ ব্যবহারকারী949300 সংক্ষিপ্ত ভেরিয়েবলগুলি আসলে প্রচুর কার্যকরী কোডের জন্য সমস্যা নয় (ম্যাথ স্টাইলের সম্মেলনগুলি সম্পর্কে ভাবেন!)। টনি মরিসের ব্লগটি আরও ভাল কী অর্থ, প্রকারগুলি বা ভার্বোজের পরিবর্তনশীল নামগুলি বোঝায় তা আরও গভীরভাবে আলোচনার জন্য পড়ুন।
আন্দ্রেস এফ।

3
@ user949300: সংক্ষিপ্ত পরিবর্তনশীল নাম স্থানীয়ভাবে পছন্দ করা হয়, এটি কার্যকরী এবং অপরিহার্য বিশ্বে একইরকম (আপনি for(i=0; i<7; ++i) { trivialOperation(i); }কিছু বিশ্রী trivialOperationCountভেরিয়েবলের সাথে লিখবেন না , আপনি কি করবেন?) এখন, প্যাটার্ন মিলের সাথে ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি কখনও কখনও আরও কিছু ভেরিয়েবলের পরিচয় দেবে যেখানে আপনি ওওতে কেবল অ্যাকসেসর পদ্ধতি কলগুলি লিখুন। ফলাফল সাধারণত আরও সংক্ষিপ্ত হয়; সম্ভবত কিছুটা কম স্ব-ব্যাখ্যামূলক, তবে ডেটা ঘোষণার সন্ধানটি সাধারণত তা দ্রুত পরিষ্কার করে দেয়। স্ট্যাটিক টাইপিং অনেক সাহায্য করে, এটি এপিএলের মতো নয়।
বাম দিকের বাইরে

উত্তর:


37

ফাংশনাল প্রোগ্রামিংয়ের সাথে এর কোনও যোগসূত্র নেই - আপনি অন্য যে কোনও প্রোগ্রামিং ভাষার প্রসঙ্গে এই ধরণের পরিস্থিতিটি খুঁজে পেতে পারেন - এমন বিকাশকারী যারা "তাদের" ভাষার উন্নত রচনাগুলি এত বেশি পছন্দ করেন যে তারা পাঠযোগ্যতা এবং বিষয়গুলি সহজ রাখার বিষয়ে কোনও সাধারণ জ্ঞানকে উপেক্ষা করে। আমি সি, সি ++, পার্ল, জাভা, সি #, বেসিক এবং অন্যান্য অ-কার্যকরী ভাষায় এরকম পরিস্থিতির মুখোমুখি হয়েছি। এটি কার্যকরী প্রোগ্রামিং নয় যা কোডে জটিলতা যুক্ত করে - প্রোগ্রামাররা তাই করে।

আমাকে ভুল করবেন না, আমি উন্নত ভাষার বৈশিষ্ট্যগুলি এড়ানোর পরামর্শ দিচ্ছি না - তবে প্রদত্ত প্রসঙ্গে সঠিক ভারসাম্য খুঁজে পাওয়া গুরুত্বপূর্ণ important সারা বিশ্বে> ১০০,০০০ বিকাশকারীদের ব্যবহারের জন্য জেনেরিক লাইব্রেরি লেখার সময়, আপনি কেবলমাত্র স্থানীয় অফিসের জন্য পৃথক রিপোর্ট জেনারেটর লেখার সময় প্রয়োগ করার বিভিন্ন ব্যবস্থা রয়েছে।


7
সম্প্রদায়ের সাথে এরও অনেক কিছু রয়েছে। জাভা বা সি # ব্যাকগ্রাউন্ড সহ বিকাশকারীদের জন্য কোডটি সবেমাত্র বোধগম্য হয় (এবং তার সম্প্রদায়টি এটি বুঝতেও পারে না)। উদাহরণস্বরূপ, যদি আপনি হাস্কেল লিখে থাকেন এবং আপনি মনাদ, প্রয়োগকারী, ফান্ট্যাক্টর ইত্যাদি ব্যবহার করেন না তবে আপনি সেই ভাষার সম্প্রদায়কে বিস্মিত করছেন। কোডের "স্বাভাবিকতা" অন্তর্নিহিত নয়, তবে এর সম্প্রদায় এবং প্রতিষ্ঠিত অনুশীলনের সাথে আপেক্ষিক।
Andres F.

1
এটি দেখতে পাওয়া শক্ত কারণ আমাদের বেশিরভাগই অত্যাবশ্যকীয় ব্যাকগ্রাউন্ড থেকে আসে, যা আমাদের মাঝে মাঝে প্রাকৃতিক বিষয় সম্পর্কে ভুল ধারণা তৈরি করতে পরিচালিত করে।
আন্দ্রেস এফ।

কেবল এসএলটি সি ++ গ্রন্থাগারের দিকে তাকান, এটি অপেশাদারদের জন্য আরও বেশি পাঠযোগ্য বলে লেখা যেতে পারে
ratchet freak

@ আর্টচেতফ্রোক: আমার ধারণা আপনি এসটিএল বলতে চাইছেন। আমি মনে করি এটি একটি খুব ভাল উদাহরণ (এবং সত্যই, আমার উত্তরটি এটি আমার মনে ছিল)। আপনি যখন এসটিএল প্রোগ্রামার হন তখন টেমপ্লেট মেটা প্রোগ্রামিং ব্যবহার করা প্রচুর অর্থবোধ করে, কারণ এটি এসটিএলকে পুনরায় ব্যবহারযোগ্য করে তোলে। এবং সেই কোডটি বজায় রাখার লোকেরা সাধারণত মেটাপোগ্র্যাম্মিং টেম্পলেট করতে ব্যবহৃত হয়। আপনার স্ট্যান্ডার্ড ব্যবসায়ের অ্যাপ্লিকেশন জুড়ে কোনও এসটিএল-জাতীয় ফ্যাশনে টেমপ্লেট মেটাপোগ্র্যামিং ব্যবহার করা সহজেই কোডকে বজায় রাখা অতিরিক্ত ও জটিল hard অবশ্যই নিশ্চয়ই (বিরল) কেস পাওয়া যাবে যেখানে ব্যবসায়িক প্রয়োগেও টিএমপি জরিমানা রয়েছে cours
ডক ব্রাউন

@ ডকব্রাউন হ্যা ডিসলেক্সিয়া ভুল সময়ে লাথি মারল, তবে সত্যি কথা বলতে যদি আমার অর্ধেক মন থাকে (এবং এখনকার চেয়ে অনেক বেশি সময়) আমি ফাংশন সংস্থাগুলির অনেকটিকে আরও বেশি পঠনযোগ্য বলে আবার লিখতে পারতাম।
ratchet freak

7

আমি বলব যে তারা যেভাবে কোড দেয় তাতে আপনার অভ্যস্ত না হওয়া ছবিটির অন্তত অংশ। আমি আপনার মতোই একই পরিস্থিতিতে আছি (সি # থেকে এফ # তে আসছি এবং হাসেল পটভূমির লোকদের সাথে কাজ করছি), এবং যখন আমি এটি একটি আকর্ষণীয় অভিজ্ঞতা পেয়েছি তখন আমার কিছু মুহুর্ত রয়েছে যখন আমি প্রাচীরের বিরুদ্ধে মাথা ঠেকিয়ে, অনুপম একটি কেবল সেখানে কী চলছে তার একটি ঝুলতে পেতে বিশেষভাবে সংশ্লেষিত বিন্দু মুক্ত ফাংশন রচনা। এটি একটি সাংস্কৃতিক জিনিস।

এই নির্দিষ্ট কোডটি প্রোগ্রামটিতে জটিলতা যুক্ত করে কিনা - তা আমি জানি না। সম্মত হয়েছেন যে জেনেরিক কোডের একটি টুকরা নিজেই জটিল হতে পারে। তবে এটি একটি ইউটিলিটি, ব্যবসার যুক্তির অংশ নয়। এটি যদি কোডবেসকে আরও জটিল বা সরল করে তোলে কিনা তা আপনি জানতে চান, আপনাকে কীভাবে কোডটির টুকরো না করে দেখতে হবে তা কল্পনা করতে হবে। এটি প্রায়শই এমন জেনেরিক কনস্ট্রাক্টসের ক্ষেত্রে ঘটে যে তারা নিজেরাই জটিল, তবে এটি এমন জটিলতা যা আপনি একক স্ক্রিনে ফিট করতে পারেন। একই সময়ে তারা পুরো কোডবেসটিকে মোটামুটি সহজ সরল করে তোলে। এটি বিশেষত মনদেদের ক্ষেত্রে।

তারপরে আবারও এটি 'আর্ট ফর আর্টের পক্ষে' এর মত হতে পারে, যেমন @ ডক ব্রাউন এর পরামর্শ দেয়। এটিও বাতিল করতে পারবেন না।


5

আমি যুক্তি দিয়ে বলব যে সাধারণ কার্যকরী প্রোগ্রামিংয়ের ফলে পরিবর্তনীয় অবস্থা হ্রাস করে জটিলতা হ্রাস পায় এবং এর ফলে কোডের একটি বিভাগ কীভাবে কাজ করে তা বোঝার চেষ্টা করার সময় বিবেচনা করা উচিত এমন মামলার সংখ্যা হ্রাস করে।

তবে, ফাংশনাল প্রোগ্রামিং উচ্চতর ডিগ্রি বিমূর্তকরণকে সম্ভব করে তোলে এবং উচ্চ বিমূর্ত কোড অত্যন্ত কার্যকর হতে পারে তবে এটি বুঝতে অসুবিধাও হতে পারে কারণ এটি আপনাকে সাধারণত আপনার বোঝার দিকনির্দেশনা দেওয়ার জন্য প্রসঙ্গটি থেকে তালাকপ্রাপ্ত হয়ে থাকে। আপনার ব্যবসায়িক বিষয়গুলি সম্পর্কে "তাদের সকলের একটি সুস্পষ্ট অর্থ এবং উদ্দেশ্য রয়েছে" নিঃসন্দেহে সত্য, তবে এটি সত্যই এর প্রতিচ্ছবি যে আপনি ইতিমধ্যে বুঝতে পারছেন এমন একটি প্রয়োজনীয়তা এবং প্রসঙ্গে যে যুক্তিটি অত্যন্ত নির্দিষ্ট। মোনাডের মতো নির্মাণের অস্তিত্ব আপনাকে কিছুটা চেষ্টা করে খুব দরকারী কিছু তৈরি করতে দেয়, তবে ওয়েবটি মনাদ কী তা বোঝানোর চেষ্টা করে পৃষ্ঠাগুলি দ্বারা বিভক্ত হয়। এটি আপনার জন্য বিমূর্ততা।

এছাড়াও, স্কালাজ এমন লোকেরা লিখেছিলেন যারা দীর্ঘকাল ধরে এফপি খাচ্ছিল এবং শ্বাস নিচ্ছিল; তারা স্কেলে হাস্কেলের কার্যকারিতাটি আনতে চেয়েছিল। এটি করার ফলে তারা শিক্ষাগত হওয়ার কোনও প্রচেষ্টা করেনি। স্ক্যালাজ এমন একটি শব্দভাণ্ডার এবং শৈলীর ব্যবহার করে যা লেখকদের কাছে স্পষ্ট এবং সোজা বলে মনে হয় তবে অবিচ্ছিন্ন হয়ে যায় ien আমাদের বাকীগুলিকে অবাক করে দেওয়ার পদ্ধতিগুলি তাদের হাস্কেল ব্যাকগ্রাউন্ডের ভিত্তিতে লেখকদের কাছে এতটাই সুস্পষ্ট বলে মনে হয়েছিল যে তারা কোনও মন্তব্যেরও নিশ্চয়তা দেয়নি।

তদ্ব্যতীত, একটি কার্যকরী প্রোগ্রামিং ভাষা হিসাবে স্কালার কিছু ত্রুটি রয়েছে (অংশে জেভিএমের ত্রুটি রয়েছে) যা স্কালাজ লেখকদের কিছু ক্ষেত্রে কুৎসিত কোড লিখতে বাধ্য করেছিল। উদাহরণস্বরূপ, সাধারণ টেল কল নির্মূলকরণের অভাব কিছু কোডে ট্রামপোলিনগুলি ব্যবহার করতে বাধ্য করে এবং "ধরণের সিস্টেম" এর অভাব প্রকারের স্বাক্ষরগুলিকে জটিল করে তুলতে পারে।

এবং অবশেষে, স্কালাজ নিজেই দুর্দান্ত ব্যবহার করে। এটিকে তার শক্তির লক্ষণ হিসাবে ভাবা যেতে পারে, তবে নিরবচ্ছিন্নভাবে এটি উত্সকে ধাঁধা তৈরি করতে পারে - আপনি যে কোডের যেকোন এলোমেলো টুকরো দেখেন সম্ভবত এটি অন্যরকম কিছু ব্যবহার করার সম্ভাবনা রয়েছে যা আপনার কাছে এলিয়েন বলে মনে হচ্ছে।

সেখানে থাকো। এবং এটি সাহায্য করতে পারে।


-4

এটি কি প্রোগ্রামে জটিলতা যুক্ত করে, বা আপনি কেবল প্রোগ্রামিংয়ের এই পদ্ধতিতে অভ্যস্ত নন?

আপনি কেন ভাবেন যে এই সম্ভাবনাগুলি একই জিনিস নয়?

ভাল লিখিত কোডটি এমন লোকেরা পড়তে পারবেন যারা নির্দিষ্ট প্রোগ্রামিং ভাষার সাথে পরিচিত নন। কিছু স্কুল (বেসিক, পাস্কেল ইত্যাদি) স্কুল-শিশুরা পড়তে এবং বুঝতে পারে যারা এর আগে কোনও প্রোগ্রামিং ভাষাও দেখেনি।

অন্য ভাষার সাথে অভিজ্ঞতা আছে এবং স্কালার সাথে অভিজ্ঞতা আছে এমন ব্যক্তি যদি (এবং আমি ধরে নিয়েছি যে স্কালাজের সাথে কমপক্ষে এক সপ্তাহের জন্য কাজ করেছে এবং কৌতুকপূর্ণ বিষয়গুলি ব্যাখ্যা করার জন্য সহকর্মী রয়েছে) তবে এখনও বিভ্রান্ত; তারপরে এটি প্রমাণ দেয় যে এটি জটিলতা যুক্ত করেছে।


11
এটি কেবল সত্য নয়:"Well written code can be read by people who aren't familiar with the specific programming language."
আন্দ্রেস এফ

@ আন্ডারস: একথা বলতে সত্য ... ভাল লিখিত কোডটি ব্যবসায়িক যুক্তি বাস্তবায়নের বিশদ থেকে পৃথক করবে এবং ব্যবসার যুক্তিটি পাঠযোগ্য হবে, কারণ এটি যা করছে তার বেশিরভাগই নামী সহায়ক ফাংশনে সোজা কল করা calls এই সাহায্যকারীরা অবশ্যই সমস্ত ধরণের ভাষার বৈশিষ্ট্যগুলি অবশ্যই ব্যবহার করতে পারেন এবং তাদের বোঝার জন্য ভাষা এবং গ্রন্থাগারগুলির সাথে ভারী অভিজ্ঞতা প্রয়োজন।
বেন ভয়েগট

4
আমি বিশ্বাস করি নিম্নলিখিত কথ্য APL হল: x[⍋x←6?40]। আপনি কি মনে করেন এটি কি করে? আমি নিশ্চিত না জানতাম…
বিডেশম

3
@ ব্রেন্ডান কেবল একই দৃষ্টান্তের মধ্যে (এবং তারপরেও, কখনও কখনও না)। উদাহরণস্বরূপ, প্রোলগ, জাভা এবং এপিএল এতই আলাদা যে আমি যুক্তি দিয়ে বলব যে আপনি যদি কেবলমাত্র তাদের মধ্যে একটি (এবং অন্য কোনও ভাষা) জানেন না তবে আপনি প্রথম দুটিটি যত ভাল জানেন তা বিবেচনা না করে আপনি অন্য দুটিটি পড়তে পারবেন না। (গুরুতরভাবে, বিডেশমের উদাহরণে, শয়তান আপনাকে কীভাবে "ক্রিসমাস ট্রি" ব্যাখ্যা করার কথা বলে যদি আপনি কোনও এপিএল না জানেন?)
ইজকাটা

1
ব্রেন্ডন, আপনার লিখিত সংজ্ঞাটি মানহীন। সু-লিখিত সর্বদা ভাষা এবং এর সম্প্রদায়ের সাথে সম্পর্কিত। এক্স ভাষায় একটি প্রোগ্রাম যদি এটি বাগি না হয় তবে তা কার্যকর এবং স্পষ্ট ... প্রদত্ত দর্শকদের জন্য ভালভাবে লেখা আছে! এটি সাধারণভাবে লিখিত ভাষার ক্ষেত্রে প্রযোজ্য: সর্বদা আপনার শ্রোতাদের জানুন। (বলতে) কোন বৈজ্ঞানিক কাগজ আপনার মায়ের কাছে ইমেলের জন্য উপযুক্ত নয় তার পক্ষে উপযুক্ত।
আন্দ্রেস এফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.