শর্তসাপেক্ষে পার্শ্ব প্রতিক্রিয়া থাকা কি কখনও ঠিক আছে? [বন্ধ]


10

আমেরিকাতে প্রত্যেকে যে বিশ্ববিদ্যালয়ের কথা শুনেছি সে বিষয়ে সিএস এমএস প্রোগ্রামে প্রবেশের পূর্বশর্ত হিসাবে আমি মধ্যবর্তী ডেটা স্ট্রাকচার কোর্সটি নিচ্ছি। ক্লাসে লেখা একটি কোডের কোডটি আমার নজর কেড়েছিল:

if (a > 33 | b++ < 54) {...}

এটি আমার কর্মক্ষেত্রে কোনও কোড পর্যালোচনা পাস করবে না। যদি আপনি একটি সাক্ষাত্কারে এর মতো কোড লিখে থাকেন তবে এটি আপনার বিরুদ্ধে একটি উল্লেখযোগ্য ধর্মঘট হবে। (পার্শ্ব প্রতিক্রিয়াগুলির সাথে শর্তসাপেক্ষ হওয়া ছাড়াও এটি স্বচ্ছতার ব্যয় করে চালাক হয়ে উঠছে))

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

আমি এমন কোনও পৃথিবী কল্পনা করতে পারি না যেখানে কোডের এই লাইনটি সর্বদা গ্রহণযোগ্য হবে, একাকী পছন্দসই হোক। আমি কি ভূল? এটা কি ঠিক আছে? আরও সাধারণ ক্ষেত্রে কী হবে: পার্শ্ব প্রতিক্রিয়া সহ শর্তসাপেক্ষ? এগুলি কি কখনও ঠিক আছে?


7
সেই লাইনটি কক্ষপথ থেকে নিকট করা উচিত। ভাল পরিমাপের জন্য দু'বার।
blrfl

8
একটি নিট: একটি একক পাইপ (উল্লম্ব বার) একটি লজিকাল "বা" এর চেয়ে কিছুটা দিকের বা বেশিরভাগ ভাষায় is বাম দিকটি সত্য হলে এটি শর্ট সার্কিট করে না। যেহেতু এই শর্তসাপেক্ষে ডান দিকের পার্শ্ব প্রতিক্রিয়া রয়েছে তাই ফলাফলের ক্ষেত্রে এটি একটি বিশেষ পার্থক্য তৈরি করে।
জোনাথন ইউনিস

2
বিভিন্ন বিভাগে আইডিয়াম ব্যবহার করা হয় যা এই বিভাগে আসবে, তবে তারা "সুপরিচিত" বা "সাধারণ" বলে সমস্যা সৃষ্টি করে না। প্রশ্নের লাইনটি মুশকিল ব্যবহারের বিভাগে পড়ে বলে মনে হচ্ছে না তাই আমি এড়াতে পারি।
জয়দী

2
@ জোনাথনউনিস, হ্যাঁ, কিছু লোক শর্ট সার্কিট মূল্যায়ন সম্পর্কে বিভ্রান্ত হয়েছিল। আমার পক্ষ থেকে একটি টাইপো নয়।
রিজানজ

5
উজ্জ্বল দিকে তাকাও. আপনি এখন আরও একটি সংস্থা জানেন যেখানে আপনি সাক্ষাত্কার নিতে চান না।
জন আর স্ট্রোহম

উত্তর:


23

আমি এটি ভাবতে পারি যে এটির জন্য একটি আধা শর্তযুক্ত পার্শ্ব প্রতিক্রিয়া রয়েছে:while(iter.MoveNext())

এটি বলেছিল, আমি মনে করি এটি বেশিরভাগ ক্ষেত্রে " কখনই সত্যই বড় কোয়ালিফায়ার হয় না" বিভাগে আসে। আমি এমন কয়েকটি বিরল ক্ষেত্রে ভাবতে পারি যেখানে আমি এটি গ্রহণযোগ্য হতে দেখেছি তবে সাধারণভাবে এটি অসম্পূর্ণ এবং এড়াতে হবে।

আমি একটি দৃশ্যকল্প যেখানে যে বিশেষ লাইন গ্রহণযোগ্য হবে মনে করতে পারেন না, কিন্তু আমি একটি দৃশ্যকল্প যেখানে যে বিশেষ লাইন হবে মনে করতে পারেন না দরকারী , তাই এটি প্রেক্ষাপটে এটা হয় কল্পনা করা কঠিন।


এটি ক্লাস চলাকালীন একটি পদ্ধতিতে একটি নিক্ষেপ লাইন ছিল। এটি দরকারী কিছু করার উদ্দেশ্যে করা হয়নি।
রিয়াঞ্জস

4
সমানভাবে, while(v = *p++)শূন্য-সমাপ্ত অ্যারে (যেমন সি স্ট্রিং) এর মাধ্যমে সি / সি ++ স্টাইলের স্ক্যানগুলি বেশ সাধারণ এবং ব্যাপকভাবে স্বীকৃত।
ফিল মিলার

3
আমি প্রায়শই ফর্মের লুপ কন্ডিশনালগুলিকে while(c = input.read() != '\n')যুক্তিসঙ্গতভাবে প্রতিমা হিসাবে বিবেচনা করি।

1
কয়েকটি সাধারণ গ্রহণযোগ্য প্রতিমা থাকতে পারে, তবে স্পষ্টতই "স্পষ্টতার ব্যয়ে চতুর হওয়া" নেভার শিবিরে পড়ে।
জুলিয়া

আমি ইটার সম্পর্কে সম্পূর্ণরূপে ভুলে গেছি ove মোভনেক্সট ()। একটি শর্তযুক্ত এর পার্শ্ব প্রতিক্রিয়া থাকার জন্য সম্পূর্ণ যুক্তিসঙ্গত কেস। ধন্যবাদ!
রিজানজ

8

আমার বিশ্বে স্মৃতি থেকে পঠনকে পার্শ্ব প্রতিক্রিয়া হিসাবে বিবেচনা করা যেতে পারে (যেমন মেমরি ম্যাপ করা আইও)।

এখন, নিম্নলিখিত বিবেচনা করুন:

    while( ( *memory_mapped_device_status_register & READY_FLAG) == 0) {
       // Wait
    }

এবং এর সাথে তুলনা করুন:

    status = *memory_mapped_device_status_register;
    while( ( status & READY_FLAG) == 0) {
        // Wait
        status = *memory_mapped_device_status_register;
    }

শর্তে পার্শ্ব প্রতিক্রিয়া (পড়ুন) এড়িয়ে যাওয়া পঠনযোগ্যতায় সহায়তা করে; অথবা এটি কেবল কোডটিকে নকল করে বিশৃঙ্খলা যুক্ত করেছে?

কোনও শর্তের পার্শ্ব প্রতিক্রিয়া থাকা ঠিক নয় (যদি কোডটি কম পাঠযোগ্য হয়) এবং এটির শর্তের পার্শ্ব প্রতিক্রিয়াও ঠিক আছে (যদি কোডটি আরও পাঠযোগ্য করে তোলে)। মূল বিষয় হ'ল "পঠনযোগ্যতা"। পাঠ্যযোগ্যতা উন্নত করার জন্য একটি বিভ্রান্তিকর প্রয়াসে (প্রায়শই বিপরীত প্রভাব থাকা অবস্থায়) মূর্খরা তৈরি করা সমস্ত বিধিগুলি।


3

যেমন প্রশ্নগুলির সাথে সর্বদা, এটি ডিগ্রির বিষয়। যদি কোনও সন্দেহের প্রমাণ না থাকে যে কোনওif অভিব্যক্তির মধ্যে যে কোনও পার্শ্ব প্রতিক্রিয়া সর্বদা খারাপ কোডের দিকে পরিচালিত করে, তবে এই অভিব্যক্তিগুলি তৈরি করা বৈধ হবে না। ভাষা ডিজাইনার ভ্রমপ্রবণ মানুষের ideosyncratic হতে পারে, কিন্তু তারা না যে মূঢ়।

এটি বলেছিল, একটি মধ্যে ন্যায়সঙ্গত পার্শ্ব প্রতিক্রিয়াগুলির উদাহরণগুলি কী if? উদাহরণস্বরূপ, ধরে নিই যে আপনাকে আইনীভাবে নিরীক্ষণের প্রয়োজনে Pকোনও সত্তার সম্পত্তিতে যে কোনও অ্যাক্সেস রেকর্ড করতে হবে required E(কল্পনা করুন যে আপনি কোনও ইউরেনিয়াম সমৃদ্ধকরণ প্ল্যানেটে কাজ করছেন এবং আপনার কোডটি কী করার অনুমতি দেয় এবং কীভাবে এটি করা উচিত তা নিয়ে খুব কঠোর আইনী নিয়ন্ত্রণ রয়েছে)) তারপরে ifযে কোনও সম্পত্তি যাচাই করে সেগুলির পার্শ্ব প্রতিক্রিয়া ঘটবে নিরীক্ষণ লগ বৃদ্ধি করা হচ্ছে।

সে খুবই সুস্পষ্ট ক্রস কাটিং উদ্বেগ, এটি প্রোগ্রাম রাষ্ট্র সম্পর্কে আপনার যুক্তি (খুব) প্রভাবিত করে না, এবং আপনি এটা এত বাস্তবায়ন করতে পারে এটি সম্পূর্ণ অদৃশ্য এবং অ বিক্ষেপী আপনার সাথে লাইন পর্যালোচনা যখন if(লুকানো অ্যাক্সেসরে দূরে, বা এওপি এর মাধ্যমে আরও ভাল)। আমি বলব যে এটি কোনও পার্শ্ব প্রতিক্রিয়ার একটি পরিষ্কার স্পষ্ট ঘটনা যা উদ্বেগ নয়। অনুরূপ পরিস্থিতিগুলি কল্পনা করা যেতে পারে যখন আপনি কেবল প্রোফাইলিং ইত্যাদির জন্য শাখা মৃত্যুদণ্ড গণনা করতে চান ইত্যাদি etc.

এই নিরসন পরিস্থিতি যতই অদৃশ্য হয়ে যাবে ততই অচেনা। যদি কোনও নির্দিষ্ট লুপের ধরণ (যেমন if((c = getc()) == 'x') { quit(); }ভাষা সম্প্রদায়ের দ্বারা সুপরিচিত এবং স্বীকৃত হয়, তবে আপনি যখন এটি স্বতঃস্ফূর্তভাবে উদ্ভাবন করেছেন তার চেয়ে এটি সমস্যার তুলনায় অনেক কম) আপনার উদাহরণের রেখাটি সেই স্ট্যান্ডার্ডের চেয়ে কম তবে আমি অনেক কিছুই কল্পনা করতে পারি আরও ভয়ঙ্কর যেগুলি আমি টাইপও করব না, সেগুলি এত ভয়াবহ।


2

যদিও সত্যই দুর্গন্ধযুক্ত কোড, সমতুল্যর তুলনায় এটি সহজ হওয়ার সুবিধা রয়েছে (এবং আরও দ্রুততর যদি আপনার কাছে ভাল অপ্টিমাইজিং সংকলক নাও থাকে) if (a > 33 | b < 54) {b++; ...} else b++;

তবে অবশ্যই এটি নিম্নলিখিতটির সাথে অনুকূল করে তোলা সম্ভব (তবে লক্ষ্য রাখুন! অতিরিক্ত প্রবাহের ক্ষেত্রে এটির আলাদা আচরণ রয়েছে!): b++; if (a > 33 | b < 53) {...}

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