এখানে একটি প্রোগ্রামিং / ভাষার সমস্যা যা আমি আপনার মতামত শুনতে চাই।
আমরা কনভেনশনগুলি তৈরি করেছি যে বেশিরভাগ প্রোগ্রামাররা (উচিত) এটি অনুসরণ করে যে ভাষা সিনট্যাক্সের একটি অংশ নয় তবে কোডটি আরও পাঠযোগ্য। এগুলি অবশ্যই সর্বদা বিতর্কের বিষয় তবে কমপক্ষে কিছু মূল ধারণা রয়েছে যা বেশিরভাগ প্রোগ্রামাররা সম্মত বলে মনে করেন। আপনার ভেরিয়েবলগুলি যথাযথভাবে নামকরণ, সাধারণভাবে নামকরণ, আপনার লাইনগুলিকে ক্রমহ্রাসমান দীর্ঘ নয়, দীর্ঘ ক্রিয়াকলাপ, encapsulations, things জিনিসগুলি এড়ানো।
তবে, এমন একটি সমস্যা আছে যে আমি এখনও কাউকে মন্তব্য করতে পাইনি এবং এটিই হতে পারে সবচেয়ে বড় দল। আপনি যখন কোনও ফাংশন কল করবেন তখন যুক্তি বেনামে থাকার সমস্যা।
ফাংশনগুলি গণিত থেকে শুরু করে যেখানে f (x) এর স্পষ্ট অর্থ রয়েছে কারণ একটি ফাংশনটির অনেক বেশি কঠোর সংজ্ঞা থাকে যা এটি সাধারণত প্রোগ্রামিংয়ে থাকে does গণিতে খাঁটি ফাংশনগুলি প্রোগ্রামিংয়ের তুলনায় অনেক কম করতে পারে এবং তারা অনেক বেশি মার্জিত সরঞ্জাম, তারা সাধারণত কেবল একটি যুক্তি (যা সাধারণত একটি সংখ্যা) নেয় এবং তারা সর্বদা একটি মান (সাধারণত একটি সংখ্যাও) ফেরত দেয়। যদি কোনও ফাংশন একাধিক আর্গুমেন্ট নেয় তবে সেগুলি প্রায়শই ফাংশনের ডোমেনের অতিরিক্ত মাত্রা are অন্য কথায়, একটি যুক্তি অন্যদের চেয়ে গুরুত্বপূর্ণ নয়। এগুলি সুস্পষ্টভাবে অর্ডার করা হয়েছে, নিশ্চিত, তবে এগুলি ছাড়াও তাদের কোনও সিমেটিক অর্ডার নেই।
প্রোগ্রামিংয়ে যাইহোক, আমাদের আরও স্বাধীনতা সংজ্ঞায়িত ফাংশন রয়েছে এবং এই ক্ষেত্রে আমি যুক্তি দেব যে এটি ভাল জিনিস নয়। একটি সাধারণ পরিস্থিতি, আপনার যেমন একটি ফাংশন সংজ্ঞায়িত করা আছে
func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {}
সংজ্ঞাটির দিকে তাকিয়ে, যদি ফাংশনটি সঠিকভাবে লেখা হয় তবে এটি কী তা পুরোপুরি পরিষ্কার। ফাংশনটি কল করার সময়, আপনার আইডিই / সম্পাদকটিতে আপনার কিছু বুদ্ধিমান / কোড সমাপ্তি যাদুও থাকতে পারে যা পরবর্তী যুক্তিটি কী হবে তা আপনাকে জানিয়ে দেবে। কিন্তু অপেক্ষা করো. আমার যদি প্রয়োজন হয় যখন আমি আসলে কলটি লিখি, এখানে কি আমরা এখানে কিছু মিস করছি না? কোডটি পড়া ব্যক্তিটির কোনও আইডিইর সুবিধা নেই এবং যদি না তারা সংজ্ঞাটিতে না যায়, তত্ক্ষণাত যুক্তি হিসাবে ব্যবহৃত হয় বলে দুটি আয়তক্ষেত্র কোনটি পাস করেছে তাদের কোনও ধারণা নেই।
সমস্যাটি তার চেয়ে আরও বেশি এগিয়ে যায়। যদি আমাদের আর্গুমেন্টগুলি কিছু স্থানীয় ভেরিয়েবল থেকে আসে তবে এমন পরিস্থিতি থাকতে পারে যেখানে আমরা কেবলমাত্র ভেরিয়েবলের নামটি দেখি বলে দ্বিতীয় যুক্তিটি কী তা আমরা জানি না। উদাহরণস্বরূপ কোডের এই লাইনটি ধরুন
DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2])
এটি বিভিন্ন ভাষায় বিভিন্ন এক্সেটেন্টগুলির সাথে হ্রাস করা হয় তবে কঠোরভাবে টাইপ করা ভাষাগুলিতে এবং এমনকি আপনি যদি নিজের ভেরিয়েবলের নাম বোধগম্যতার সাথে করেন তবে আপনি ভেরিয়েবলটি টাইপটি ফাংশনে পাস করার সময় উল্লেখ করেন না।
এটি সাধারণত প্রোগ্রামিংয়ের সাথে থাকে বলে এই সমস্যার অনেকগুলি সম্ভাব্য সমাধান রয়েছে। ইতিমধ্যে অনেকগুলি জনপ্রিয় ভাষায় প্রয়োগ করা হয়েছে। উদাহরণস্বরূপ সি # তে নামযুক্ত পরামিতি। যাইহোক, আমি যা জানি তার সবগুলি ক্ষেত্রেই যথেষ্ট ত্রুটি রয়েছে। প্রতিটি ফাংশন কলে প্রতিটি পরামিতি নামকরণ সম্ভবত পঠনযোগ্য কোড হতে পারে না। এটি প্রায় মনে হয় সম্ভবত আমরা সম্ভবত সম্ভাবনাগুলি ছড়িয়ে দিচ্ছি যা সাধারণ পাঠ্য প্রোগ্রামিং আমাদের দেয়। আমরা প্রায় প্রতিটি ক্ষেত্রে JUST পাঠ্য থেকে সরে এসেছি, তবুও আমরা একই কোড করি। আরও তথ্য কোড প্রদর্শিত হবে? আরও পাঠ্য যুক্ত করুন। যাইহোক, এটি কিছুটা স্পর্শকাতর হয়ে উঠছে তাই আমি এখানেই থামব।
একটি উত্তর আমি দ্বিতীয় কোড স্নিপেটের কাছে পেয়েছিলাম যে আপনি সম্ভবত প্রথমে কিছু নামযুক্ত ভেরিয়েবলগুলিতে অ্যারেটি আনপ্যাক করবেন এবং তারপরে সেগুলি ব্যবহার করবেন তবে ভেরিয়েবলের নামটি অনেক কিছুই বোঝাতে পারে এবং যেভাবে এটি ডাকা হয় তা আপনাকে অবশ্যই এটির উপায়টি বলে না বলা ফাংশন প্রসঙ্গে ব্যাখ্যা করা। স্থানীয় সুযোগে, আপনার দুটি বাম আয়তক্ষেত্র থাকতে পারে বাম রেক্টেঙ্গেল এবং ডান রেক্টাঙ্গেল কারণ এটি শব্দার্থত উপস্থাপন করে তবে কোনও ফাংশন দেওয়ার সময় তারা যেভাবে প্রতিনিধিত্ব করে তা প্রসারিত করার প্রয়োজন হয় না।
প্রকৃতপক্ষে, যদি আপনার ভেরিয়েবলগুলি নামক ফাংশনটির প্রেক্ষাপটে নামকরণ করা হয় তবে আপনি যে ফাংশন কলটির সাথে সম্ভাব্যতার চেয়ে কম তথ্য প্রবর্তন করছেন এবং কোনও স্তরে যদি কোড আরও খারাপ কোডের দিকে পরিচালিত করে তবে আপনি কম তথ্য প্রবর্তন করছেন। আপনার যদি এমন একটি প্রক্রিয়া থাকে যার ফলস্বরূপ আপনি যে আয়তক্ষেত্রটি রেক্টফোর্ডক্লিপিংয়ে সংরক্ষণ করেন এবং তার পরে অন্য পদ্ধতি যা রেক্টফরড্রয়িং সরবরাহ করে, তারপরে ড্রইরেক্টাঙ্গেল ক্লিপডে আসল কলটি কেবল অনুষ্ঠান। একটি লাইন যার অর্থ নতুন কিছুই নয় এবং ঠিক সেখানে রয়েছে তাই কম্পিউটারটি জানে যে আপনি ঠিক কী চান তা আপনার নামকরণের সাথে ইতিমধ্যে ব্যাখ্যা করার পরেও। এটি একটি ভাল জিনিস নয়।
আমি এই সম্পর্কে নতুন দৃষ্টিভঙ্গি শুনতে সত্যিই পছন্দ করব। আমি নিশ্চিত যে আমি এই সমস্যাটি বিবেচনা করার মতো প্রথম ব্যক্তি নই, তবে এটি কীভাবে সমাধান করা হবে?