কারিরিং ব্যবহার করার জন্য পরামিতিগুলির অর্ডার


93

প্যারামিটারের ক্রম পরিবর্তন করতে আমি সম্প্রতি দু'বার রিফ্যাক্টর কোড পেয়েছি কারণ হ্যাকগুলি পছন্দ flipবা ঘটছিল এমন অনেক কোড \x -> foo bar x 42ছিল।

কোনও ফাংশন সিগনেচার ডিজাইন করার সময় কোন নীতিগুলি কারিরিয়ের সর্বোত্তম ব্যবহার করতে আমাকে সহায়তা করবে?

উত্তর:


111

যে ভাষাগুলি সহজে কারিঙ এবং আংশিক-প্রয়োগকে সমর্থন করে তাদের জন্য, এখানে মূলত ক্রিস ওকাসাকির একটি যুক্তিযুক্ত যুক্তি রয়েছে:

  • শেষ আর্গুমেন্ট হিসাবে তথ্য কাঠামো রাখুন

কেন? এরপরে আপনি ডেটাতে দুর্দান্তভাবে অপারেশন রচনা করতে পারেন । যেমন insert 1 $ insert 2 $ insert 3 $ s। এটি রাষ্ট্রের কার্যকারিতা জন্যও সহায়তা করে ।

স্ট্যান্ডার্ড লাইব্রেরি যেমন "পাত্রে" এই কনভেনশনটি অনুসরণ করে

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

  • সবচেয়ে বিবিধ যুক্তি শেষ রাখুন

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


ওকাসাকী দৃশ্যের একটি সংক্ষিপ্তসার তাঁর এডিসন গ্রন্থাগারে দেওয়া হয়েছে (আবারও, অন্য একটি ডেটা স্ট্রাকচার লাইব্রেরি):

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

প্রথম বুলেট পয়েন্টের সমষ্টির হিসাবে, যুক্তিটিও রাখুন যা কোনও ডেটা স্ট্রাকচারে টিকে থাকতে পারে। এটি মানচিত্র, ভাঁজ এবং বন্ধুদের পরিষ্কার করে তোলে। tl; তালিকায় ডাঃ জিনিস সর্বশেষে যান।
জন এফ। মিলার

4
লুক আপ যাইহোক শৃঙ্খলাবদ্ধ হতে পারে না, সুতরাং প্রথম পয়েন্ট যে এটিকে সমর্থন করে না। haskell.org/haskellwiki/Parameter_order চারপাশে অন্যভাবে একটি যুক্তিযুক্ত যুক্তি তোলে - "যেহেতু মানচিত্রের ধরণের অবজেক্টগুলি ম্যাপিংকে প্রতিনিধিত্ব করে, তাই কিছু ফাংশন থাকা স্বাভাবিক যে ম্যাপের অবজেক্টটিকে উপস্থাপিত ফাংশনে রূপান্তর করে।"
ব্র্যান্ডন

11

আপনি প্রথমে পুনরায় ব্যবহার করার সম্ভাবনা যুক্তিগুলি রাখুন Place ফাংশন আর্গুমেন্ট এটির দুর্দান্ত উদাহরণ। আপনি map fএকই তালিকায় অনেকগুলি বিভিন্ন ফাংশন মানচিত্র করতে চান না তার চেয়ে আপনি দুটি ভিন্ন তালিকার বেশি চাইবেন।


5
আপনি যদি একই তালিকার সাথে অনেকগুলি ফাংশন ম্যাপিং করে থাকেন তবে সম্ভবত আপনার ফাংশনগুলির একটি তালিকা তৈরি করা উচিত এবং map ($myList)পরিবর্তে সেই তালিকার উপরে।
স্কুইডলি

3

আমি আপনি যা করেছেন তা করার ঝোঁক করছি, এমন কিছু অর্ডার বেছে নিন যা ভাল বলে মনে হয় এবং তারপরে রিফ্যাক্টর যদি এটির সক্রিয় হয় যে আরও একটি আদেশ ভাল। অর্ডারটি নির্ভর করে আপনি কীভাবে ফাংশনটি ব্যবহার করতে যাচ্ছেন (প্রাকৃতিকভাবে) তার উপর অনেক কিছুই নির্ভর করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.