আপনি যদি এই নতুন সম্পর্কে কী মনে করেন তবে-সিনট্যাক্স [বন্ধ]


11

আমি কেবল এমন কিছু সম্পর্কে ভাবছিলাম যা আমার ইফ-এলিফ-অন্য নিয়ন্ত্রণগুলিতে রাখা সত্যিই দুর্দান্ত।


if condition:
    stuff()
elif condition:
    otherstuff()
then:
    stuff_that_applies_to_both()
else:
    stuff_that_doesnt_aply_to_either()

সুতরাং মূলত একটি thenচালানো হবে যখন কোনও শর্তটি চালিত হলে অন্য শর্তটি ছাড়াই। আপনি কি এটি দরকারী মনে করেন? এটি পাইথনের ব্যতীত চেষ্টা করার মতোই।

আমি মনে করি আপনারা কেউ কেউ খুব প্রাথমিক প্রয়োগ বাস্তবায়ন করছেন। thenব্লক শুধু মত হবে elseএকটি ব্লক try-exceptপাইথন ব্লক। আমি এটির আসল কারণটি এ জাতীয় পরিস্থিতির জন্য situations


m = {}
if condition == '1':
    m['condition'] = condition
elif condition2 == '3':
    m['condition2'] = condition2
elif condition3 == 'False':
    m['condition3'] = True
then:
    run_test_that_relies_on_one_of_the_conditions_being_true()

return m

thenব্লক প্রথম scoped ঠিক যদি elseহয়। তাই বাসা বাঁধার কাজ করে। এবং যদি আপনার যদি বিবৃতিগুলির আগে কোনও পদ্ধতি চালনার দরকার হয় তবে এর ব্যবহারের ক্ষেত্রে এটির কোনও সম্পর্ক নেই।


এটা কীভাবে বাসা বাঁধতে পারে?
aggietech

6
বাক্সের বাইরে চিন্তা করার জন্য +1, তবে আমি এটি বাস্তবায়নের জন্য ভোট দেব না। আমার উত্তর দেখুন কেন নীচে।
ওয়াঙ্কো দ্য সনে

1
তাহলে finallyজাভা'র মতো 'তাহলে' অভিনয় ?
অ্যালেক্স ফেনম্যান

1
আমি thenকিছুটা বিভ্রান্তিকর বলে মনে করি। সাধারণত thenএকটি পরে ঘটে বোঝানো হয় if। আমার অর্থ, আপনি বলছেন if condition, then stuff()তবে তারপরেই এগিয়ে যানthen stuff that applies to both
ম্যাট ওলেনিক

2
একটি আকর্ষণীয় চিন্তা অনুশীলনের জন্য +1, তবে আমি খারাপ আইডিয়া এর আওতায় দেওয়া উত্তরগুলির সাথে একমত। এটি কেবল স্বজ্ঞাত নয় এবং আমি এটি দেখতে পেয়েছিলাম সত্যই কিছু কোডার আপ ট্রিপিং।
ব্লেয়ারহিপ্পো

উত্তর:


17

আমি মনে করি এটি ভয়ঙ্কর দেখাচ্ছে। আপনি যদি কোডটি বিভিন্ন শর্তের পরে চলতে চান তবে হয় (ক) এই শর্তগুলি পুনরায় পরীক্ষা করুন বা (খ) নির্দেশিত সাফল্যের স্থিতিতে একটি পরিবর্তনশীল সেট করুন।


2
আমি সম্মতি জানাই - আপনি যেমন ব্যাখ্যা দিয়েছিলেন তা ছাড়া এটির অর্থ কী তা গ্রহণ করা খুব কঠিন।
tcrosley

কিছু প্রত্যাশার সাথে কীভাবে খুব বেশি কাজ করে তার ব্যাখ্যা প্রয়োজন কেন?
ফালমারি

5
কারণ এটি পড়তে কোডকে আরও শক্ত করে তোলে।
আনসান

আমি সত্যিই নিশ্চিত নই যে এটি ন্যায্য। কোডে প্রতিটি গঠন একবারে ব্যাখ্যা করতে হবে।
Magus

14

সাধারণত আপনি ইতিমধ্যে একটি স্যুইচ / কেস দিয়ে এটি করতে পারেন এবং আপনি যা প্রস্তাব করছেন তার উপর একটি স্যুইচ / কেস আরও সূক্ষ্ম সুরক্ষা সরবরাহ করে।

এটি যুক্তিসঙ্গতভাবে সঠিকভাবে পড়ে না। অন্যথায় যদি বি হয় তবে সি। এমন কাউকে বোঝায় না যে সি বা মৃত্যুদণ্ড কার্যকর করা হবে যদি এ বা বি হয় সত্যকে মূল্যায়ন করে।


2
পাইথনের সুইচ / কেস স্টেটমেন্ট নেই
ফলমারি

2
আমি মনে করি না যে প্রশ্নটি কেবল পাইথনের উত্তরের দিকে সরাসরি যুক্ত হয়েছিল, তবে এটি যদি উদ্দেশ্য হয় তবে দয়া করে পাইথন হিসাবে ট্যাগ করুন।
ব্রায়ান আর বন্ডি

ঠিক আছে, এটি অজগরের দিকে সরাসরি কথিত নয়। উদাহরণটি ছিল অজগরে। তবে কেন এটির প্রয়োজন হয় না সে সম্পর্কে আপনার প্রতিক্রিয়া যদি "সেখানে স্যুইচ স্টেটমেন্ট রয়েছে", তবে অজগরটি সেগুলিতে নেই।
ফালমারি

1
@ ফালমারি: মোটামুটি ভাল, তাই আমি আমার উত্তরটি অনুমান করি যে পাইথন ক্লাসিক সুইচ বিবৃতি সমর্থন করা ভাল।
ব্রায়ান আর বন্ডি

প্রশ্নের কোডটি পাইথনে রয়েছে এর অর্থ এই নয় যে প্রশ্নটি পাইথন সম্পর্কিত, কারণ এটি সিউডোকোডও হতে পারে। যদি এটি কেবল পাইথন সম্পর্কেই থাকে তবে এটিকে ট্যাগ করা উচিত
ফুক্লভ

8

আকর্ষণীয়, তবে আমার কাছে মনে হয় (স্বীকারযোগ্যভাবে আমার উপায়ে কিছুটা সেট করা হয়েছে) পাঠযোগ্যতা, যুক্তি এবং সিনট্যাক্স সমস্যার জন্য আমন্ত্রণ।

সম্পাদনা করুন: আপনার ইফ-এলিফ খুব সহজ - যদি 10 এলিফ থাকে তবে কী হবে? 20? সব শর্ত সত্য হতে হবে? এর সম্ভাবনা কী?
আপনার ইফ-এলিফ খুব সহজ - যদি 10 এলিফ থাকে তবে কী হবে? 20? এটি কি এটিকে মোটামুটি অপঠনযোগ্য করে তুলবে না?

এছাড়াও, চেষ্টা-ও-সত্য প্রতিষ্ঠিত পদ্ধতি দ্বারা সহজেই অর্জন করা যায়:

if (thisCondition or thatCondition)
{
  if (thisCondition)
     stuff();
  else
     otherstuff();

    stuff_that_applies_to_both();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

পৃথক পদক্ষেপের আগে "স্টাফ_ট_অ্যাপলি_ টু_বথ" এর প্রয়োজন হলে কী হবে? আপনার কোড এই কেসটি পরিচালনা করে না:

if (thisCondition or thatCondition)
{
  stuff_that_applies_to_both();

  if (thisCondition)
     stuff();
  else
     otherstuff();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

শেষ অবধি, এই সিনট্যাক্সটি আরও শর্ত সহ বৃহত্তর নমনীয়তার জন্য অনুমতি দেয়: যদি (এই শর্ত বা সেই শর্ত বা অন্য কোনও শর্ত) {স্টাফ_ট্যাট_এপলি_স_ল_ ();

  // Any combination of the three conditions using 
  // whichever logical syntax you'd like here
  if (thisCondition and anotherCondition)
     stuff();
  else if (thisCondition or thatCondition)
     stuff_number_2();
  else
     otherstuff();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

আমি / অন্যটি ব্যবহার করছি, তবে সহজেই একটি পতাকা সহ একটি সুইচ বিবৃতি ব্যবহার করতে পারতাম:

Boolean conditionApplies = true;

switch (someConditionToCheck)
{
    case thisCondition:
      stuff();
      break;

    case thatCondition:
        otherStuff();
        break;

    default:
        stuff_that_doesnt_aply_sic_to_either();
        conditionApplies = false;
        break;
}

if (conditionApplies)
    stuff_that_applies_to_both();

নোট করুন যে আমার আসলে কন্ডিশনের প্রয়োগের পতাকাটির দরকার ছিল না - আমি উভয় ডিফল্ট শর্তে "স্টাফ_ট্যাট_্যাপ্লাইস_ টো_বথ ()" ফাংশন যুক্ত করতে পারতাম - আমি কেবল এটি করেছি তাই এটি উপরে বর্ণিত বাক্য গঠনটির মতো দেখতে আরও "ততক্ষণ" বরং "অন্য" এর চেয়ে বেশি।

অতএব, এটি আমার কাছে অত্যন্ত বিশেষায়িত বাক্য গঠন বলে মনে হচ্ছে, যেখানে আরও সাধারণ বাক্য গঠন বিলটি আরও পূরণ করে।

একটি সম্ভাব্য বৈশিষ্ট্য চিন্তা করার জন্য +1 (এটি করা চালিয়ে যান!) তবে আমি এটি প্রয়োগের পক্ষে ভোট দেব না।


1
"চেষ্টা করা এবং সত্য প্রতিষ্ঠিত পদ্ধতি" এর জন্য +1 - যদি কোনও সমস্যার যুক্তিসঙ্গত সমাধান হয় তবে এটি ব্যবহার করা সাধারণত ভাল :) :)
শয়নকাল

what if there were 10 elifs? 20? Would all conditions need to be true?এটা সম্ভব না. শুধুমাত্র 1 এলিফ সত্য হতে পারে কারণ এটি আরও মূল্যায়ন করা বন্ধ করে দেয়।
ফালমারি

আমার ভুল - আমি এটি "এবং" যখন আপনি "বা" বলতে চেয়েছিলেন তা হিসাবে পড়েছি। যাইহোক, আমি আমার উত্তরের পাশে দাঁড়িয়েছি - আপনি যা বলেছিলেন তা থেকে আমি এটি আপডেট করব।
ওয়াঙ্কো দ্য সনে

আপনি কি সত্যিই মনে করেন যে আপনি এখানে যে সিনট্যাক্স পোস্ট করেছেন তা আমার পরামর্শের চেয়ে আরও পরিষ্কার? আপনি কেবল দু'বার আপনার শর্তাদি যাচাই করছেন না, বাসা
বেঁধে রাখার

1
আপনার যেমন হবে ততক্ষণ যদি আপনার "তত্ক্ষণিকভাবে" সমস্ত অবস্থাতে প্রযোজ্য না হয়, যা আপনি আরও বেশি করে যুক্ত করেন, সম্ভাবনা কম ও কমতে থাকে। এবং ব্যক্তিগতভাবে, কোনও সি / সি ++ / সি # ব্যাকগ্রাউন্ড থেকে এসে আমি নীড় বিভক্ত সিনট্যাক্সের চেয়ে কিছুটা কম বিভ্রান্তিকর দেখতে পেয়েছি (যেমন এখানে "যদি" বা সম্ভবত "এলসিফ" তে কিছু করা, এবং তারপরে নীচে ঝাঁপিয়ে পড়ে কিছু করছি । এ "তারপর" আর আমি ব্যক্তিগতভাবে, সিনট্যাক্স আরো সব শর্ত একসঙ্গে আছে পাঠযোগ্য এটি সঠিক নাও হতে পারে, কিন্তু এটা আমার দিন থেকে দিন বিশ্বের একটি প্রতিষ্ঠিত
Wonko থেকে Sane থেকে

2

আমি আজ এই জাতীয় কিছু ব্যবহার করতে আপত্তি করবে না। তবে, আমি যতক্ষণ না পুনরাবৃত্তি করি ততবার আমি এটি প্রায় ব্যবহার করব।

অতিরিক্ত পরিমাণে বাসা ছাড়াই কোড কমপক্ষে আরও ভাল দেখায়। যদিও আমি পছন্দ Else Ifকরি elif। আমি Thenসাথে Doএবং ফাইনালের Elseসাথে প্রতিস্থাপন করব Otherwise



ওহ, আমি ভেবেছিলাম আপনি একটি নতুন ভাষা ডিজাইন করছেন। আমি কেবল নাম পরিবর্তনগুলি আরও সুনির্দিষ্ট হওয়ার জন্য পরামর্শ দিচ্ছিলাম, আপনি চাইলে এলিফ ছেড়ে যান, তবে শেষের মতো মনে হয় এটি অন্য কোনও নিয়মের থেকে আলাদা হওয়া উচিত।
পিটার টার্নার

এটি কোনও নতুন ভাষার জন্য অগত্যা নয়, তবে অজগরটির পক্ষেও এটি অগত্যা নয়। সাধারণভাবে একটি সিনট্যাক্স নিয়মের জন্য একটি নতুন ধারণা। এটি তুলনামূলকভাবে কয়েকটি পার্শ্ব প্রতিক্রিয়া সহ যে কোনও ভাষায় প্রয়োগ করা যেতে পারে।
ফালমারি

0

এটি একটি দুর্দান্ত ধারণা মত মনে হচ্ছে। তবে আমি যে সমস্যার সমাধান করতে পারি তা হ'ল আপনি বাগের ঝুঁকিতে বেশি। একটি if / অন্যথায় লিখার মত এবং সেই সময়ে blah () কল করা পছন্দ করে। অতিরিক্ত না লিখলে যদি সে ব্লাচ চায় না, তখন থেকে ব্লাহ সরিয়ে এবং আপনার আইএফএস / অন্য আইফিসে যুক্ত করে। তারপরে আপনি বা অন্য কোনও প্রোগ্রামার যখন অন্য বিবৃতি যুক্ত করেন তখন আপনি আশা করতে পারেন যে ব্লাহ ডাকবে তবে তা নয়।

অথবা আপনার বেশ কয়েকটি আইএফ থাকতে পারে, একটি ব্লাহ লিখুন এবং সমস্ত আইএফএস ভুলে যেতে পারেন তবে একটির জন্য এটির প্রয়োজন যা কিছু ভেঙে ফেলবে। আপনি যদি এটিকে ব্লকের অধীনে রাখেন তবে আপনার প্রতিটি অনুসরণ করার প্রয়োজন হলে তাদের সম্ভাবনাও রয়েছে। সম্ভবত অন্যটিতে একটি বিল সেট করুন (NoUpdate = সত্য) এবং কেবল একটি ((NoUpdate) লিখুন under যার অধীনে পরিষ্কার হয় এবং যদি এটি দ্বারা সেট করা যায়

আমি কেবল বলছি এটি বাগের চেয়ে বেশি প্রবণ বলে মনে হচ্ছে, আমি ধারণাটি পছন্দ করি না। আমি এটিকে কোনও ভাষায় দেখে মনে করব না তবে আমার ভাষা যদি সমর্থন করে তবে আমি যে কোনও সিটিওইওনকে এটি ব্যবহার করব তা কল্পনা করতে পারছি না।


Possibly setting a bool in else (NoUpdate=true) and just write a if(!NoUpdate) {} directly under which is clearer and can be set by an ifএটি হ'ল এটি যা প্রতিরোধ করবে বলে মনে করা হচ্ছে। এটি একটি এলিফ স্টেটমেন্টের পুরো বক্তব্য। এলিফ কোনওভাবেই প্রয়োজনীয় নয়, এটি বিবৃতি দিয়ে পরীক্ষা করা যেতে পারে, তবে এটি জটিল হয়ে ওঠে।
ফালমারি

0

আমি আপনার বাক্য গঠনকে বিভ্রান্ত মনে করি, তবে ধারণার মধ্যে আমি কিছু মূল্য দেখি। স্বতঃস্ফূর্তভাবে, যখন আমি বিষয়টি বিবেচনা করেছি, আমি নিজেকে যা খুঁজে পেয়েছি তা হ'ল "অনাবিল", যা মূলত সর্বশেষে যে ঘটনাগুলি চালিত elseহয়নি, সেখানে জিনিসগুলি কার্যকর করে । এ কোণ থেকে এটিকে দেখার জন্য, আমি পরামর্শ দেব যে এর মাধ্যমে একটি অনুরূপ ফলাফল অর্জন করতে পারে:

  করা
  {
    যদি (শর্ত 1)
      ... শর্ত 1 এর জন্য স্টাফ
    অন্যথায় যদি (শর্ত 2)
      ... শর্ত 2 জন্য স্টাফ
    আর
    {
      ... উভয় শর্তের জন্য স্টাফ
      বিরতি;
    }
    ... উভয় শর্তের জন্য স্টাফ
  } যখন (0); // বিরতির জন্য অবিরত পয়েন্ট

অন্য একটি বিকল্প কিছু ক্ষেত্রে হতে পারে:

  if ((শর্ত 1 && (ক্রিয়া 1,1)) ||
       (শর্ত 2 && (ক্রিয়া 2,1)) ||
       (Action_for_neither, 0))
    action_for_either;

কিছুটা অদ্ভুত লাগছে, তবে কিছু ক্ষেত্রে কোডের সদৃশ কোড বা ব্যবহার ব্যতীত ইভেন্টগুলির কাঙ্ক্ষিত ক্রমটি প্রকাশ করার কোনও ভাল উপায় নাও gotoথাকতে পারে (যেটি কার্টুনের পরে এখানে প্রবেশ করানো ব্যতীত খুব খারাপ নাও হতে পারে)।

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