সম্প্রতি, আমি একজন বন্ধুর সাথে একটি আকর্ষণীয় কথোপকথন করেছি, যিনি আমার মতো একজন সফ্টওয়্যার বিকাশকারী। আমরা আলোচনা করছিলাম কিভাবে বিভিন্ন প্রোগ্রামিং ভাষা ত্রুটি মোকাবেলা করে, এবং এটি কিছু মতবিরোধের দিকে পরিচালিত করে। আমরা ভেবেছিলাম কোন ত্রুটি-হ্যান্ডলিং পদ্ধতিগুলি সবচেয়ে ভাল কাজ করে, ভাল এবং অসুবিধাগুলি কী এবং এমনকি আমরা ব্যতিক্রম ছাড়া বাঁচতে পারি কিনা। এই কথোপকথনটি বিভিন্ন প্রোগ্রামিং ভাষায় ত্রুটি পরিচালনার বিষয়ে আরও গভীরভাবে অন্বেষণ করার জন্য আমার কৌতূহল জাগিয়েছে, এবং এখন আমি যা শিখেছি তা ভাগ করে নিতে আমি উত্তেজিত।
আমার দৈনন্দিন কাজে, আমি পিএইচপি এবং গোলং ব্যবহার করি - ত্রুটি পরিচালনার জন্য আলাদা পদ্ধতির সাথে দুটি ভাষা। এই নিবন্ধে, আমি আপনাকে একটি যাত্রায় নিয়ে যেতে চাই যেখানে আমরা এই ভাষাগুলি কীভাবে ত্রুটিগুলি মোকাবেলা করে তা তুলনা করব। কিন্তু আরো আবিষ্কার করার আছে! আমরা বিকল্প ত্রুটি-হ্যান্ডলিং পদ্ধতিগুলিও অন্বেষণ করব এবং কোনটি বিভিন্ন কাজের জন্য সবচেয়ে উপযুক্ত তা খুঁজে বের করব। সুতরাং, কোডিং জগতে ত্রুটি পরিচালনার একটি আকর্ষক অনুসন্ধানের জন্য প্রস্তুত হন।
প্রোগ্রামিং এ ত্রুটি পরিচালনা করা অত্যন্ত গুরুত্বপূর্ণ। পিছনে ফিরে তাকালে, আমরা যেভাবে ত্রুটিগুলি মোকাবেলা করেছি তা দেখায় যে কীভাবে বিকাশকারীর চাহিদা এবং চ্যালেঞ্জগুলি সময়ের সাথে পরিবর্তিত হয়েছে৷
প্রাথমিকভাবে, ত্রুটি কোড রিটার্ন প্রভাবশালী ছিল. এই সহজ, প্রায়শই পূর্ণসংখ্যা-ভিত্তিক, নির্দেশিত সাফল্য বা নির্দিষ্ট ত্রুটির ধরন প্রদান করে। যদিও তারা দক্ষ ছিল, তাদের ত্রুটি ছিল যে তারা প্রায়শই কোডটিকে বিশৃঙ্খল করে এবং এটিকে কম পাঠযোগ্য করে তোলে। একটি ত্রুটি বোঝার জন্য, একজনকে ক্রমাগত ডকুমেন্টেশন বা ত্রুটি কোড সংজ্ঞাগুলিতে ফিরে যেতে হয়েছিল।
ব্যতিক্রমগুলি একটি আরও স্বজ্ঞাত সমাধান হিসাবে আবির্ভূত হয়েছে: একটি কোড ফেরত দেওয়ার পরিবর্তে, প্রোগ্রামটি যখনই একটি ত্রুটি ঘটবে তখনই একটি ব্যতিক্রম নিক্ষেপ করবে, যা বিকাশকারীকে কোডের একটি নির্দিষ্ট অংশে এটি ধরার অনুমতি দেবে৷ এই পদ্ধতির স্বচ্ছতা এবং ত্রুটি পরিচালনা কেন্দ্রীভূত করার ক্ষমতার জন্য গ্রহণ করা হয়েছিল।
শীঘ্রই, ত্রুটি কলব্যাক স্থল লাভ করে, বিশেষ করে অ্যাসিঙ্ক্রোনাস পরিবেশে। ধারণাটি সোজা ছিল: একটি ত্রুটির জন্য অপেক্ষা করার পরিবর্তে, কেন এটি পরিচালনা করার জন্য একটি ফাংশন (একটি কলব্যাক) পাস করবেন না? জাভাস্ক্রিপ্টে onError(callback)
প্যাটার্ন জনপ্রিয় হয়ে উঠেছে, যা ত্রুটি পরিচালনাকে আরও সক্রিয় করে তুলেছে।
কিছু প্রোগ্রামিং ভাষা বিশেষ ফাংশন চালু করেছে যা আপনাকে ত্রুটি এবং ব্যতিক্রমগুলির সাথে কাজ করতে দেয়। উদাহরণস্বরূপ LUA-তে, error()
এবং pcall()
আছে। এগুলি প্রথাগত ত্রুটি কোড এবং ব্যতিক্রম প্রক্রিয়াগুলির মিশ্রণের প্রস্তাব দেয়।
পূর্বে বর্ণিত ত্রুটিগুলির সাথে কাজ করার পদ্ধতিগুলির সমান্তরালে, মোনাডের মতো একটি ধারণা কার্যকরী প্রোগ্রামিং ভাষাগুলিতে উপস্থিত হয়েছিল। এগুলি সাফল্য বা ব্যর্থতা নির্দেশ করে এমন একটি প্রেক্ষাপটে একটি মান মোড়ানো, যা আরও অভিব্যক্তিপূর্ণ এবং নিরাপদ ত্রুটি পরিচালনার অনুমতি দেয়। তা ছাড়া, এগুলি অন্যান্য বিভিন্ন কার্যকরী নিদর্শনগুলির সাথে ব্যবহার করা যেতে পারে, যা শক্তিশালী এবং সংক্ষিপ্ত ত্রুটি পরিচালনা এবং অপারেশনগুলির চেইনিংয়ের অনুমতি দেয়।
কিন্তু আসুন আমাদের ফোকাস পিএইচপি এবং গোলং-এ স্থানান্তর করা যাক। PHP এর ব্যাপক ত্রুটি হ্যান্ডলিং ক্ষমতা আছে। সংস্করণ 5.0 এর আগে, এই প্রোগ্রামিং ভাষাতে কোনও ব্যতিক্রম ছিল না। বিকাশকারীরা বিভিন্ন ধরনের ত্রুটি পরিচালনার পদ্ধতি ব্যবহার করেছে, যেমন trigger_error
ফাংশন, যা ব্যবহারকারী-স্তরের ত্রুটি/সতর্কতা/বিজ্ঞপ্তি বার্তা তৈরি করে; set_error_handler
ফাংশন, যা আপনাকে স্ক্রিপ্টে ত্রুটি পরিচালনার জন্য একটি কলব্যাক সংজ্ঞায়িত করতে দেয়, অসফল ফাংশন সম্পাদনের ফলে সক্রিয়ভাবে 'মিথ্যা' বা 'নাল' ফেরত দেয়, ইত্যাদি।
এই পদ্ধতিগুলির মধ্যে অনেকগুলি এখনও পিএইচপি কোডে ব্যাপকভাবে ব্যবহৃত হয়। তবুও, ব্যতিক্রম এবং ভাষা নির্মাণের আবির্ভাবের সাথে তাদের পরিচালনার জন্য, তারা বিকাশকারীদের মধ্যে ব্যাপক জনপ্রিয়তা অর্জন করেছে, যেহেতু তারা ঐতিহ্যগত ত্রুটি পরিচালনার পদ্ধতিগুলির তুলনায় অনেক সুবিধা প্রদান করেছে, উদাহরণস্বরূপ, ত্রুটি সম্পর্কে আরও বিস্তারিত তথ্য এবং এটি কোথায় ঘটেছে, একটি কাঠামোগত পদ্ধতিতে ত্রুটিগুলি পরিচালনা করার ক্ষমতা এবং জটিল কোডের উন্নত পাঠযোগ্যতা।
অন্যদিকে, গোলং একটি বহু-রিটার্ন প্যাটার্ন নিয়ে কাজ করে যেখানে ফাংশনগুলি ফলাফল এবং একটি ত্রুটি উভয়ই প্রদান করে, অন্তর্নিহিত ব্যতিক্রম পরিচালনার উপর স্পষ্ট ত্রুটি পরীক্ষা করার উপর জোর দেয়। গোলং-এর নির্মাতারা এই নীতি মেনে চলেন যে প্রোগ্রামিং ভাষা যতটা সম্ভব পরিষ্কার এবং সহজ হওয়া উচিত। এর ডিজাইনের মূল লক্ষ্য ছিল কোড লেখার জন্য স্পষ্ট এবং দক্ষ ভাষা নির্মাণ প্রদান করা, বিশেষ করে গুগলের মতো বড় প্রতিষ্ঠানে। এইভাবে, বিকাশকারীরা কোড শৈলী নিয়ে তর্ক করে সময় নষ্ট না করে বা জটিল এবং বিভ্রান্তিকর কোড বোঝার চেষ্টা না করে সমস্যা সমাধানের দিকে মনোনিবেশ করতে পারে।
যেমন আগে উল্লেখ করা হয়েছে, পিএইচপি-তে অনেক ত্রুটি-হ্যান্ডলিং ক্ষমতা রয়েছে, তবে ব্যতিক্রমগুলি আজকাল সবচেয়ে জনপ্রিয় পদ্ধতি। যদিও এই পদ্ধতিটি স্বজ্ঞাত এবং অন্যান্য অনেক প্রোগ্রামিং ভাষাকে প্রতিফলিত করে, এটি নেস্টেড স্ট্রাকচারের দিকে নিয়ে যেতে পারে, এমন পরিস্থিতি যখন কেউ একাধিক সম্ভাব্য ত্রুটির উত্সের সাথে কাজ করে। এই "ট্রাই-ক্যাচ" নেস্টিং কোডটিকে পড়া কঠিন করে তুলতে পারে, বিশেষ করে নতুনদের জন্য। এর এটা ভেঙ্গে দেওয়া যাক.
সুবিধাদি:
অসুবিধা:
গোলং একটি স্বতন্ত্র পন্থা নেয়। ব্যতিক্রমের পরিবর্তে, ফাংশনগুলি তাদের নিয়মিত রিটার্ন মানের পাশাপাশি একটি ত্রুটি মান প্রদান করে। তারপরে এই ত্রুটিটি পরীক্ষা করা এবং পরিচালনা করার দায়িত্ব বিকাশকারীর। যদিও এটি গো কোডটিকে আরও দীর্ঘ করে তুলতে পারে, এটি কখন এবং কোথায় ত্রুটি ঘটতে পারে সে সম্পর্কে একটি ক্রিস্টাল-স্পষ্ট বোঝার প্রস্তাব দেয়।
সুবিধাদি:
অসুবিধা:
পিএইচপি এবং গোল্যাং-এর মধ্যে বিতর্ক প্রায়শই প্রোগ্রামিং-এর বিভিন্ন ডোমেনে উদ্যোক্তা হয়, কিন্তু বিতর্কের সবচেয়ে উল্লেখযোগ্য ক্ষেত্রগুলির মধ্যে একটি হল তাদের কর্মক্ষমতা এবং সম্পদ খরচের পার্থক্য, বিশেষ করে যখন এটি ত্রুটি পরিচালনার ক্ষেত্রে আসে।
পিএইচপি ক্ষেত্রে, ব্যতিক্রমগুলি একটি স্ট্যাক ট্রেস তৈরি করার অনুমতি দেয়, যা কলের ক্রম ট্র্যাক করতে সাহায্য করে যা ত্রুটির দিকে পরিচালিত করে। এই ট্রেস ডিবাগ করার জন্য মূল্যবান তথ্য প্রদান করে। যাইহোক, এই ধরনের একটি ট্রেস তৈরি করা, বিশেষত জটিল অ্যাপ্লিকেশনগুলিতে, গণনামূলক সংস্থান এবং মেমরির প্রয়োজন। ফলস্বরূপ, যখন ব্যতিক্রমগুলি ঘন ঘন নিক্ষেপ করা হয়, তখন তারা অ্যাপ্লিকেশনটিকে ধীর করে দিতে পারে এবং এর সংস্থান পদচিহ্ন বাড়াতে পারে।
অন্যদিকে, গোলং এর পদ্ধতি ব্যতিক্রম স্ট্যাক ট্রেস তৈরির ওভারহেড এড়িয়ে যায়। পরিবর্তে, ফাংশন ত্রুটি মান প্রদান করে যা প্রোগ্রামার দ্বারা স্পষ্টভাবে পরীক্ষা করা আবশ্যক। এই পদ্ধতির ফলস্বরূপ ক্ষীণ কর্মক্ষমতা এবং সম্পদের ব্যবহার হ্রাস পায়। তবে, এটি বিকাশকারীর কাঁধে দায়িত্বটি বর্ধিতভাবে স্থানান্তরিত করে, যা কিছু উপায়ে সম্পদ-নিবিড়।
PHP-এর ব্যতিক্রম-ভিত্তিক পদ্ধতি বা গোলং-এর সুস্পষ্ট ত্রুটি পরিচালনার মধ্যে সিদ্ধান্ত শুধুমাত্র কর্মক্ষমতা এবং সংস্থান সম্পর্কে নয়, তবে আরও কিছু ট্রেড-অফ সম্পর্কে। ব্যতিক্রমগুলি ডিবাগিং তথ্যের একটি ভাণ্ডার প্রদান করে, তবে সেগুলি খরচ করে আসে; গোলাং এর পদ্ধতি, ঘুরে, সম্পদ-বান্ধব কিন্তু ত্রুটি ব্যবস্থাপনায় অধ্যবসায় প্রয়োজন।
PHP, ওয়েব ডেভেলপমেন্টের চাহিদা, অগ্রাধিকারযুক্ত সরলতা এবং শেয়ার্ড হোস্টিং থেকে জন্ম নিয়েছে। এর ত্রুটি হ্যান্ডলিং এটিকে ওয়েব অ্যাপ্লিকেশনের জন্য ডেভেলপার-বান্ধব করে তোলে। অন্যদিকে, গুগলের সফ্টওয়্যার জায়ান্টদের দ্বারা তৈরি গোলং আধুনিক সিস্টেম প্রোগ্রামিংয়ের জন্য ডিজাইন করা হয়েছিল। এটি একাধিক রিটার্ন মান ব্যবহার করে সুস্পষ্ট ত্রুটি পরিচালনার উপর জোর দেয়: এই দৃষ্টান্তটি স্পষ্ট কোড প্রবাহকে উৎসাহিত করে এবং নিয়মিত মান হিসাবে ত্রুটি তৈরি করে, আরও সুনির্দিষ্ট নিয়ন্ত্রণ প্রদান করে।
বিভিন্ন উত্স এবং লক্ষ্য তাদের ত্রুটি-হ্যান্ডলিং দর্শনকে আকার দিয়েছে। PHP এর লক্ষ্য ওয়েব ডেভেলপারদের মধ্যে ব্যাপকভাবে গ্রহণ করা, অ্যাক্সেসযোগ্যতা এবং নম্রতাকে মূল্য দেওয়া। বিপরীতে, গোলং কর্মক্ষমতা, স্বচ্ছতা এবং দৃঢ়তার সন্ধান করেছে, যা পরিমাপযোগ্য এবং রক্ষণাবেক্ষণযোগ্য সিস্টেমের জন্য আদর্শ।
তাদের পন্থা অনিবার্যভাবে ব্যতিক্রমের প্রয়োজনীয়তা নিয়ে বিতর্কের জন্ম দেয়।
যদিও ব্যতিক্রম-মুক্ত কোডিং কঠিন বলে মনে হতে পারে, এটি বিকাশকারীদের আরও স্বচ্ছ, অনুমানযোগ্য কোডের দিকে ঠেলে দেয়। যাইহোক, এটি সর্বজনীনভাবে উপযুক্ত নাও হতে পারে এবং এটি নির্দিষ্ট ভাষার অভিপ্রায় এবং অ্যাপ্লিকেশন বোঝার প্রয়োজনীয়তা তুলে ধরে।
আমার জন্য, ব্যতিক্রমগুলির সম্ভাব্য অসুবিধা সত্ত্বেও, আমি সেই বিকাশকারীদের মধ্যে একজন যারা তাদের কাজে তাদের ব্যবহার করতে পছন্দ করে, যদি এটি সম্ভব হয়। গোলং পদ্ধতিটি আমার কাছে কম স্বাচ্ছন্দ্য বোধ করে, তবে এটি আমাকে আমি কী করছি এবং আমি কী অর্জন করতে চাই সে সম্পর্কে আরও ভাবতে বাধ্য করে। আপনি কোন পদ্ধতি বেশি ব্যবহার করতে চান? আপনি মন্তব্যে এই তথ্য শেয়ার করলে আমি খুশি হব!