x < y < z
প্রোগ্রামিং ভাষাতে সাধারণত কেন পাওয়া যায় না?
এই উত্তরে আমি এটি শেষ করি
- যদিও এই নির্মাণটি কোনও ভাষার ব্যাকরণে প্রয়োগ করতে তুচ্ছ এবং ভাষা ব্যবহারকারীদের জন্য মান তৈরি করে,
- অন্যান্য বৈশিষ্ট্যগুলির তুলনায় এটির গুরুত্ব এবং ভাষার পরিচালন সংস্থাগুলির অনিচ্ছুক কারণে বেশিরভাগ ভাষায় এটির অস্তিত্ব নেই বলে প্রাথমিক কারণগুলি is
- সম্ভাব্যভাবে ব্রেকিং ব্যবহারকারীদের দ্বারা বিরক্ত ব্যবহারকারীরা
- বৈশিষ্ট্যটি (যেমন: অলসতা) বাস্তবায়নে সরানো।
ভূমিকা
আমি এই প্রশ্নে পাইথনিস্টের দৃষ্টিকোণ থেকে কথা বলতে পারি। আমি এই বৈশিষ্ট্যটি সহ কোনও ভাষার ব্যবহারকারী এবং আমি ভাষার প্রয়োগের বিবরণ অধ্যয়ন করতে চাই। এর বাইরেও, আমি সি এবং সি ++ (আইএসও স্ট্যান্ডার্ডটি কমিটি দ্বারা পরিচালিত হয় এবং বছরের দ্বারা সংস্করণিত হয় like) এর মতো ভাষা পরিবর্তনের প্রক্রিয়াটির সাথে কিছুটা পরিচিত।
পাইথনের ডকুমেন্টেশন এবং বাস্তবায়ন
ডক্স / ব্যাকরণ থেকে আমরা দেখতে পাচ্ছি যে আমরা তুলনামূলক অপারেটরগুলির সাথে যে কোনও সংখ্যা প্রকাশ করতে পারি:
comparison ::= or_expr ( comp_operator or_expr )*
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
| "is" ["not"] | ["not"] "in"
এবং ডকুমেন্টেশনে আরও বলা হয়েছে:
তুলনাগুলি নির্বিচারে বেঁধে রাখা যেতে পারে, উদাহরণস্বরূপ, x <y <= z এর সমতুল্য x <y এবং y <= z এর সমতুল্য, ব্যতীত কেবল y একবারই মূল্যায়ন করা হয় (তবে উভয় ক্ষেত্রেই x <y পাওয়া গেলে Z এর মোটেও মূল্যায়ন করা হয় না to be false)।
যৌক্তিক সাম্য
সুতরাং
result = (x < y <= z)
কথাটি হল সমতুল্য মূল্যায়ন পদ x
, y
এবং z
, ব্যতিক্রম যে সঙ্গে y
দুইবার মূল্যায়ন হয়:
x_lessthan_y = (x < y)
if x_lessthan_y: # z is evaluated contingent on x < y being True
y_lessthan_z = (y <= z)
result = y_lessthan_z
else:
result = x_lessthan_y
আবার, পার্থক্যটি হ'ল y এর সাথে কেবল একবার মূল্যায়ন করা হয় (x < y <= z)
।
(দ্রষ্টব্য, প্রথম বন্ধনীগুলি সম্পূর্ণ অপ্রয়োজনীয় এবং অপ্রয়োজনীয়, তবে আমি এগুলি অন্যান্য ভাষা থেকে আগতদের সুবিধার জন্য ব্যবহার করেছি এবং উপরের কোডটি বেশ আইনী পাইথন)
পার্স করা বিমূর্ত সিনট্যাক্স ট্রি পরিদর্শন করা হচ্ছে
পাইথন কীভাবে বেঁধে দেওয়া তুলনা অপারেটরগুলি পার্স করে তা আমরা পরিদর্শন করতে পারি:
>>> import ast
>>> node_obj = ast.parse('"foo" < "bar" <= "baz"')
>>> ast.dump(node_obj)
"Module(body=[Expr(value=Compare(left=Str(s='foo'), ops=[Lt(), LtE()],
comparators=[Str(s='bar'), Str(s='baz')]))])"
সুতরাং আমরা দেখতে পাচ্ছি যে পাইথন বা অন্য কোনও ভাষার পার্স করার পক্ষে এটি সত্যিই কঠিন নয়।
>>> ast.dump(node_obj, annotate_fields=False)
"Module([Expr(Compare(Str('foo'), [Lt(), LtE()], [Str('bar'), Str('baz')]))])"
>>> ast.dump(ast.parse("'foo' < 'bar' <= 'baz' >= 'quux'"), annotate_fields=False)
"Module([Expr(Compare(Str('foo'), [Lt(), LtE(), GtE()], [Str('bar'), Str('baz'), Str('quux')]))])"
এবং বর্তমানে গৃহীত উত্তরের বিপরীতে, টেরিনারি অপারেশনটি একটি জেনেরিক তুলনা অপারেশন, এটি প্রথম এক্সপ্রেশন, নির্দিষ্ট তুলনাগুলির একটি পুনরাবৃত্ত এবং প্রয়োজনীয় হিসাবে মূল্যায়নের জন্য এক্সপ্রেশন নোডের একটি পুনরাবৃত্তি গ্রহণ করে। সহজ।
পাইথন উপসংহার
আমি ব্যক্তিগতভাবে পরিসীমা শব্দার্থতাকে বেশ মার্জিত বলে মনে করি এবং আমি জানি বেশিরভাগ পাইথন পেশাদাররা বৈশিষ্ট্যটির ব্যবহারকে ক্ষতিকারক হিসাবে বিবেচনা করার পরিবর্তে উত্সাহিত করবেন - শব্দার্থবিজ্ঞানগুলি সুপরিচিত ডকুমেন্টেশনে (স্পষ্টভাবে উপরে উল্লিখিত) বেশ স্পষ্টভাবে বলা হয়েছে।
নোট করুন যে কোডটি লেখা হওয়ার চেয়ে অনেক বেশি পঠিত। কোডের পঠনযোগ্যতার উন্নতি করে এমন পরিবর্তনগুলিকে আলিঙ্গন করা উচিত, ভয়, অনিশ্চয়তা এবং সন্দেহের জেনেরিক স্পেক্টার উত্থাপনের মাধ্যমে ছাড় দেওয়া উচিত নয় ।
তাহলে x x y <z প্রোগ্রামিং ভাষাতে সাধারণত কেন উপলব্ধ না?
আমি মনে করি যে বৈশিষ্ট্যের তুলনামূলক গুরুত্ব এবং ভাষার গভর্নরদের দ্বারা অনুমোদিত পরিবর্তনের আপেক্ষিক গতি / জড়তাকে কেন্দ্র করে এমন কয়েকটি কারণ রয়েছে।
অন্যান্য আরও গুরুত্বপূর্ণ ভাষা বৈশিষ্ট্য সম্পর্কে অনুরূপ প্রশ্ন জিজ্ঞাসা করা যেতে পারে
জাভা বা সি # তে কেন একাধিক উত্তরাধিকার পাওয়া যায় না? উভয় প্রশ্নের ভাল উত্তর এখানে নেই । বব মার্টিন অভিযোগ করেছেন, সম্ভবত বিকাশকারীরা খুব অলস ছিলেন এবং প্রদত্ত কারণগুলি কেবল অজুহাত। এবং একাধিক উত্তরাধিকার কম্পিউটার বিজ্ঞানের একটি খুব বড় বিষয়। অপারেটর শৃঙ্খলার চেয়ে এটি অবশ্যই গুরুত্বপূর্ণ।
সরল কাজের ক্ষেত্র বিদ্যমান
তুলনা অপারেটর শৃঙ্খলা মার্জিত, তবে একাধিক উত্তরাধিকার হিসাবে গুরুত্বপূর্ণ নয়। এবং জাভা এবং সি # এর কার্যকারিতা হিসাবে ইন্টারফেস যেমন রয়েছে, তেমনি প্রতিটি ভাষা একাধিক তুলনার জন্যও করে - আপনি কেবল তুলনামূলকভাবে বুলিয়ান "এবং" এর সাথে শৃঙ্খলাবদ্ধ করেন যা সহজেই যথেষ্ট কাজ করে।
বেশিরভাগ ভাষা কমিটি দ্বারা পরিচালিত হয়
বেশিরভাগ ভাষাগুলি কমিটির দ্বারা বিকশিত হচ্ছে (পাইথনের মতো জীবনের জন্য বুদ্ধিমান উপকারী ডিক্টেটর থাকার চেয়ে)। এবং আমি অনুমান করি যে এই সমস্যাটি এটির সম্পর্কিত কমিটিগুলি থেকে তৈরি করার পক্ষে যথেষ্ট সমর্থন দেখেনি।
যে ভাষাগুলি এই বৈশিষ্ট্যটি দেয় না সেগুলি কী পরিবর্তন করতে পারে?
যদি কোনও ভাষা x < y < z
প্রত্যাশিত গাণিতিক শব্দার্থ ছাড়াই অনুমতি দেয় তবে এটি একটি ব্রেকিং পরিবর্তন হবে। এটি যদি এটি প্রথম স্থানে অনুমতি না দেয় তবে এটি যুক্ত করা প্রায় তুচ্ছ হবে।
ব্রেকিং পরিবর্তন
ভাঙ্গা পরিবর্তনের সাথে ভাষাগুলি সম্পর্কে: আমরা ভাঙা আচরণের পরিবর্তনের সাথে ভাষাগুলি আপডেট করি - তবে ব্যবহারকারীরা এটি পছন্দ করেন না, বিশেষত ব্যবহারকারীদের এমন বৈশিষ্ট্যগুলি যা ভঙ্গ হতে পারে। যদি কোনও ব্যবহারকারী পূর্বের আচরণের উপর নির্ভর করে থাকে তবে x < y < z
তারা সম্ভবত উচ্চস্বরে প্রতিবাদ করবে। এবং যেহেতু বেশিরভাগ ভাষা কমিটি দ্বারা পরিচালিত হয়, আমি সন্দেহ করি যে আমরা এই জাতীয় পরিবর্তনের পক্ষে সমর্থন করার জন্য অনেক রাজনৈতিক ইচ্ছা অর্জন করব।