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