হ্যাঁ
আপনার সর্বদা বন্ধনী ব্যবহার করা উচিত ... আপনি অগ্রাধিকারের ক্রমটি নিয়ন্ত্রণ করেন না ... সংকলকটির বিকাশকারী তা করেন। এখানে একটি গল্প যা আমার কাছে প্রথম বন্ধনী ব্যবহার না করে ঘটেছিল। এটি দুই সপ্তাহের জন্য কয়েক শতাধিক লোককে প্রভাবিত করে।
বাস্তব বিশ্ব কারণ
আমি একটি মূল-ফ্রেম অ্যাপ্লিকেশন উত্তরাধিকারসূত্রে পেয়েছি। একদিন, পরিষ্কার নীলের বাইরে এটি কাজ করা বন্ধ করে দিয়েছে। এটাই ... পুফ এটা ঠিক থেমে গেছে।
আমার কাজটি ছিল এটি যত দ্রুত সম্ভব কাজ করা। উত্স কোডটি দুই বছর ধরে সংশোধন করা হয়নি, তবে হঠাৎ করেই এটি বন্ধ হয়ে যায়। আমি কোডটি সংকলনের চেষ্টা করেছি এবং এটি এক্সএক্স লাইনে ভেঙে গেছে। আমি লাইন এক্সএক্সের দিকে তাকালাম এবং লাইন এক্সএক্স ব্রেকটি কী করবে তা আমি বলতে পারলাম না। আমি এই অ্যাপ্লিকেশনটির জন্য বিশদ চশমা জিজ্ঞাসা করেছি এবং এটির কোনও কিছুই নেই। লাইন এক্সএক্স অপরাধী ছিল না।
আমি কোডটি মুদ্রণ করেছি এবং উপরে থেকে নীচে পর্যালোচনা শুরু করেছি। আমি যা চলছে তার একটি ফ্লোচার্ট তৈরি শুরু করেছি। কোডটি এতটাই সংশ্লেষিত হয়েছিল যে আমি এর মধ্যে খুব কমই বুঝতে পারি। আমি এটিকে ফ্লোচার্ট করার চেষ্টা ছেড়ে দিয়েছি। এই পরিবর্তনটি কীভাবে বাকী প্রক্রিয়াটির উপর প্রভাব ফেলবে তা না জেনে পরিবর্তন আনতে আমি ভীত ছিলাম, বিশেষত যেহেতু অ্যাপ্লিকেশনটি কী করেছিল বা নির্ভরতা শৃঙ্খলে এটি কোথায় ছিল সে সম্পর্কে আমার কোনও বিবরণ ছিল না।
সুতরাং, আমি সিদ্ধান্ত নিয়েছি উত্স কোডের শীর্ষে শুরু করুন এবং কোডটি আরও পঠনযোগ্য করে তুলতে হোয়াইটস্পেস এবং লাইন ব্রেক যুক্ত করুন। আমি লক্ষ্য করেছি, কিছু ক্ষেত্রে, সেখানে ছিল যদি অবস্থার যে মিলিত ANDএবং ORএবং এটি কোন ডেটা হচ্ছে ছিল মধ্যে পরিষ্কারভাবে পার্থক্যসূচক ছিল না ANDইডি ও কোন ডেটা হচ্ছে ছিল ORইডি। তাই আমি প্রায় প্রথম বন্ধনী নির্বাণ শুরু ANDএবং ORতাদেরকে আরো পাঠযোগ্য করতে শর্ত।
যেহেতু আমি ধীরে ধীরে এটি পরিষ্কার করে নিচে নামলাম, আমি পর্যায়ক্রমে আমার কাজ সংরক্ষণ করব। এক পর্যায়ে আমি কোডটি সংকলনের চেষ্টা করেছি এবং একটি অদ্ভুত জিনিস হ্যাঁসেন্ড করে। ত্রুটিটি কোডের মূল লাইনটি পেরিয়ে গেছে এবং এখন আরও নীচে ছিল। তাই আমি অব্যাহত, speparating ANDএবং ORডান বন্ধনী সঙ্গে শর্ত। আমি যখন এটি পরিষ্কার করে ফেললাম তখন এটি কাজ করেছিল। চিত্রে যান.
আমি তখন ক্রিয়াকলাপের দোকানে গিয়ে তাদের জিজ্ঞাসা করার সিদ্ধান্ত নিয়েছি যে তারা সম্প্রতি প্রধান ফ্রেমে কোনও নতুন উপাদান ইনস্টল করেছেন কিনা। তারা বলেছে হ্যাঁ, আমরা সম্প্রতি সংকলকটি আপগ্রেড করেছি। Hmmmm।
দেখা যাচ্ছে যে পুরানো সংকলক নির্বিশেষে বাম থেকে ডানদিকে অভিব্যক্তিটি মূল্যায়ন করেছে। সংকলকটির নতুন সংস্করণটি বাম থেকে ডানে তবে অস্পষ্ট কোডের এক্সপ্রেশনগুলির মূল্যায়ন করেছে, যার অর্থ অস্পষ্ট সংমিশ্রণ ANDএবং এর ORসমাধান করা যায়নি।
পাঠ আমি এর কাছ থেকে শিখেছি ... সর্বদা, সর্বদা, সর্বদা পৃথক ANDশর্ত এবং ORশর্তগুলির জন্য প্যারেন্স ব্যবহার করে যখন তারা একে অপরের সাথে কনজেকশনে ব্যবহৃত হয়।
সরলীকৃত উদাহরণ
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...(কোডগুলির মধ্যে বেশ কয়েকটি দ্বারা লিটারযুক্ত)
এটি আমি যা सामना করেছি তার একটি সরল সংস্করণ। যৌগিক বুলিয়ান যুক্তি বিবৃতিগুলির সাথে অন্য শর্ত ছিল।
আমি মনে করি এটি চ্যাজ করা:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
কোনও চশমা না থাকায় আমি এটি পুনরায় লিখতে পারি না। মূল লেখক দীর্ঘ চলে গেছে। মনে পড়ে তীব্র চাপের কথা। একটি সম্পূর্ণ কার্গো জাহাজ বন্দরে আটকা পড়েছিল এবং বোঝা বন্ধ করা যায়নি কারণ এই ছোট্ট প্রোগ্রামটি কার্যকর হয়নি। কোনও সতর্কতা নেই উত্স কোডে কোনও পরিবর্তন নেই। এটি কেবলমাত্র আমার উপর লক্ষ্য হয়েছিল যে নেটওয়ার্ক অপারেশনগুলি জিজ্ঞাসা করার পরে যদি তারা দেখেছি যে পেরেন যুক্ত করার পরে ত্রুটিগুলি স্থানান্তরিত হয়েছে।