পাইথন ব্লকে কোলন কি প্রযুক্তিগতভাবে প্রয়োজনীয়?


19

এটি আসলে একটি অজগর নবাগত যে আরও বুঝতে চান তার তাত্ত্বিক প্রশ্ন।

পাইথনে ব্লক প্রাথমিক বিবৃতি দেওয়ার পরে আমি কোলনকে ভুলে যাচ্ছি। এটাই আমার অর্থ:

  • for <variable> in <sequence>:
  • if <blah blah>:

আমার ধারণাটি হ'ল একটি কারণ যা আমি ভুলে যাচ্ছি তা হ'ল তারা ডি-ফ্যাক্টো অন্তর্নিহিত: কোলন বা না, বিবৃতিটি এই লাইনের সাথে শেষ হয়।

আমার প্রশ্ন - যা অজগর সিনট্যাক্স কীভাবে কাজ করে তা জানতে আমি জিজ্ঞাসা করি - হ'ল কোলন আসলেই অপ্রয়োজনীয় কিনা? আমি কি অজগর সিনট্যাক্সটি পরিবর্তন করেছিলাম যাতে কোলন আর প্রয়োজন হয় না, কিছু ভেঙে যায়? এটি কিছু বিবৃতি অস্পষ্ট বা অসম্ভব করে তুলবে?


4
আমি মনে করি আপনি প্রশ্নটি বুঝতে পারছেন না, যা সিনট্যাক্সের জন্য কাজ করতে কলোনগুলি প্রয়োজনীয় কিনা। এছাড়াও, আপনার উত্তরটি যাই হোক না কেন, এর একটি ব্যাখ্যাও থাকা উচিত।
টোমা জ্যাটো - মনিকা

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

আমি এটিকে আরও ভাল করে কীভাবে বলতে পারি তা আমি জানি না। আমার প্রশ্ন মূলত, যদি আপনি সব পাইথন সিনট্যাক্স পরিবর্তন হতে পারে, যাতে এটা এখন আর পরে কোলন দরকার if, else, whileইত্যাদি। আপনি যদি তা করেন তবে অজগরটি কি এখনও এমন ভাষা হয়ে উঠবে যে অস্পষ্টতা ছাড়াই ব্যবহার করা যেতে পারে?
টোমা জ্যাটো - মনিকা

বুঝেছি! অজগরটির সিনট্যাক্স ডিজাইনের সিদ্ধান্তগুলি নিয়ে এটি একটি প্রশ্ন । দুঃখিত, এটি ভুল বুঝেছি। ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
ভান সুর

অনুমান। অনুভব করা হয় যে অনুশীলনে দোভাষী / পার্সারদের দ্বারা লাইন বিরতিগুলি সনাক্ত করা আরও শক্ত বা পাঠযোগ্যতার জন্য রয়েছে। LUA এ আপনি if .. then .. endএকটি লাইনে লিখতে পারেন । সুতরাং এখানে অজগর thenদুটি :এবং একটি নতুন লাইন দুটি দ্বারা প্রতিস্থাপিত হয় । এর মধ্যে একটি অপ্রয়োজনীয় বলে মনে হচ্ছে।
ভান সুর

উত্তর:


9

হ্যাঁ, কোলনের কিছু নির্দিষ্ট নির্মাণ নিষ্ক্রিয় করা প্রয়োজন। উদাহরণস্বরূপ, বিবেচনা করুন if x - y < z: pass। কোলন ব্যতীত আমরা x, y, এবং z এর প্রসঙ্গটি না জেনে কীভাবে পার্স করব তা আমরা সিদ্ধান্ত নিতে পারি না। if x: -y < z...x বুলিয়ান if x - y < z:হলে বৈধ, অন্যথায় বৈধ।

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


1
অপেক্ষা করুন, আপনার একই লাইনে কোলনের পরে একটি বিবৃতি থাকতে পারে? আমি নিশ্চিত যে এটি অনুমোদিত নয়।
টোমা জ্যাটো - মনিকা

1
এটি অনুমোদিত, তবে এটির পরে কেবল একটি লাইন ব্রেক সহ।
ফোশি

তবুও কিছুটা বিভ্রান্ত। এটি অনুমোদিত: if condition: print("Condition passed")\nঅনুমোদিত? \nমুদ্রণ বিবৃতির পরে নতুন লাইন symbolizes।
টোমা জ্যাটো - মনিকা

অবশ্যই, চেষ্টা করুন।
রিমকো জারলিচ ২

1
@ টমাসজ্যাটো: হ্যাঁ কোলনের পরে আপনার কোনও বক্তব্য থাকতে পারে। এটি অবিলম্বে ব্লকটি সমাপ্ত করে, সুতরাং ব্লকটি যখন একটি ছোট একটি লাইনার হয় তখন এটি মূলত কার্যকর।
মিথ্যা রায়ান

14

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

অজগরটিতে কোলনের প্রয়োজনীয়তার মূল কারণ হ'ল মানব পাঠযোগ্যতা। পাইথন এফএকিউ থেকে উদ্ধৃতি :

যদি / যখন / ডিএফ / শ্রেণির বিবৃতিগুলির জন্য কলোনের প্রয়োজন হয়?

পাঠ্যতা বৃদ্ধির জন্য কোলনটি প্রাথমিকভাবে প্রয়োজন (পরীক্ষামূলক এবিসি ভাষার ফলাফলগুলির মধ্যে একটি)। এই বিবেচনা:

if a == b
    print(a)

বনাম

if a == b:
    print(a)

দ্বিতীয়টি কীভাবে পড়া সহজ হয় তা লক্ষ্য করুন। কীভাবে কোনও কোলন এই FAQ উত্তরে উদাহরণ স্থাপন করে তা আরও লক্ষ্য করুন; এটি ইংরেজিতে একটি স্ট্যান্ডার্ড ব্যবহার।

অন্য একটি ছোট কারণ হ'ল বিন্যাসটি সিনট্যাক্স হাইলাইটিং সহ সম্পাদকদের পক্ষে আরও সহজ করে তোলে; প্রোগ্রামের পাঠ্যের আরও বিস্তৃত বিশ্লেষণের পরিবর্তে কখন ইন্ডেন্টেশন বাড়ানো দরকার তা সিদ্ধান্ত নিতে তারা কলোনের সন্ধান করতে পারে।

এফএকিউতে যেমন উল্লেখ করা হয়েছে, কোলন ভাষা সম্পূর্ণরূপে বিশ্লেষণ না করে পাইথন কোড প্রক্রিয়াজাতকরণকে আরও সহজ করে তোলে। পাইথন সংকলক সহ একটি সম্পূর্ণ পার্সার রয়েছে এমন কোনও পাঠ্য প্রসেসর কোলন ছাড়াই এটি করতে পারে না যখন এটি প্রয়োজন না হয়েছিল বা যদি এটি দ্ব্যর্থহীন যখন alচ্ছিক করা হয়।


4
"লক্ষ্য করুন দ্বিতীয়টি কীভাবে পড়তে সহজ হয়” "আমি প্রথমটি পড়তে সহজ মনে করি। কম শব্দ।
ব্যবহারকারী 76284

10

এটি কম্পিউটারের জন্য নয়, মানুষের জন্য।

গুডো ভ্যান রসুম (পাইথনের স্রষ্টা) কিছুক্ষণের জন্য পাইথন ইতিহাসের ব্লগ রেখেছিলেন। পাইথনের অনেক বৈশিষ্ট্যের উত্স, এবিসি - তে কোলনটি চালু হয়েছিল ।

ইন এ "কারিন Dewar, খাঁজ এবং কোলন" এই ব্লগ পোস্টে , গাইডো লিখেছেন:

এবং এখানে আমি ল্যামবার্টের অনুরোধে প্যারাফ্রেজ করব।

১৯ 197৮ সালে, জাবোনা (পোল্যান্ড) একটি মেনশনের নকশার অধিবেশনে, রবার্ট দেওয়ার, পিটার কিং, জ্যাক শোয়ার্জ এবং ল্যামবার্ট প্রতিটি বিকল্পে লিখিত (বগি) বুদ্বুদ সাজানোর বাস্তবায়নগুলির তুলনা করে বি এর জন্য বিভিন্ন বিকল্প প্রস্তাবিত বাক্য গঠনের তুলনা করছিলেন। যেহেতু তারা একমত হতে পারেনি, রবার্ট দেওয়ারের স্ত্রীকে তার ঘর থেকে ডেকে নিয়ে তার মতামত চেয়েছিলেন, যেমনটি আধুনিক প্যারিসকে হেরা, অ্যাথেনা এবং অ্যাফ্রোডাইটের সৌন্দর্যের তুলনা করতে বলেছিল। তবে প্রথম সংস্করণটি তাকে বোঝানোর পরে, তিনি মন্তব্য করেছিলেন: "আপনার অর্থ, লাইনটি যেখানে এটি বলে: 'আমার জন্য ...', এটি যে রেখাগুলি অনুসরণ করে, তার জন্যই করা উচিত; কেবল সেই লাইনের জন্য নয়? ! " এবং এখানে বিজ্ঞানীরা বুঝতে পেরেছিলেন যে সেই লাইনের শেষে যদি কোনও কোলন থাকে তবে ভুল বোঝাবুঝি এড়ানো যেত।

( বি এখানে বি0 , বি 1, ... এর ধারাবাহিক প্রবন্ধগুলি ... যা এবিসি'র দিকে পরিচালিত করেছিল It's এটি বি ভাষার ভাষা নয় যা সি এর পূর্বসূরী)।

আমার মনে আছে গিডো 90 এর দশকে নির্দেশ করেছিলেন যে এটি সম্পাদকদের সুবিধার্থে ছিল , যে কোনও কোলনের সাথে শেষ হওয়া লাইনের পরে স্বয়ংক্রিয়ভাবে একটি ইনডেন্ট in োকাতে পারে। তবে আমি এখনও এর জন্য কোনও উত্স খুঁজে পাইনি।


4

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

kons  = lambda hd, tl: lambda x: hd if x else tl
virst = lambda l: l(True )
rrest = lambda l: l(False)

পরামিতি তালিকা থেকে দেহকে আলাদা করতে কোলন না থাকলে আমাকে ইনডেন্টেশন ব্যবহার করতে হবে:

kons  = lambda hd, tl
    lambda x
        hd if x else tl

virst = lambda l
    l(True )

rrest = lambda l
    l(False)

আমি বিশ্বাস করি কোবারার পূর্ববর্তী সংস্করণগুলি কোলনকে alচ্ছিক করে তুলেছে, আপনি ইনডেন্টেশন বা কোলন বা উভয়ই ব্যবহার করতে পারেন। এটি রুবিতে কীভাবে কাজ করে তার অনুরূপ, যেখানে কন্ট্রোল এক্সপ্রেশনগুলির বিভিন্ন অংশ আলাদা করার জন্য কীওয়ার্ড রয়েছে তবে আপনি এক্সপ্রেশন বিভাজক (সেমিকোলন বা নিউলাইন) ব্যবহার করতে পারেন:

# idiomatic
while true do puts "I am awesome" end
#          ↑↑

# non-idiomatic, but legal
while true; puts "I am awesome" end
#         ↑

# non-idiomatic, but legal
while true
puts "I am awesome" end

# idiomatic
while true
  puts "I am awesome"
end

কোবারার বর্তমান সংস্করণগুলিতে আপনি কমা ব্যবহার করতে পারেন:

if x
    y

হিসাবে লেখা যেতে পারে

if x, y

আপনি প্রয়োজন কিছু নিয়ন্ত্রণ এক্সপ্রেশন বা সংজ্ঞা বিভিন্ন স্থানে পৃথক প্রণালী। পাইথনে, এটি হ'ল কোলন। আপনি যদি কোলনটি সরিয়ে ফেলেন তবে আপনাকে এটিকে অন্য কোনও কিছু দিয়ে প্রতিস্থাপন করতে হবে, যেমন জোরপূর্বক ইনডেন্টেশন। কেবল কোলন অপসারণ কাজ করবে না।

একেবারে নিশ্চিত হওয়ার একমাত্র উপায় হ'ল কোলন দিয়ে এবং ছাড়াই সিনট্যাক্সকে আনুষ্ঠানিক করা এবং এর অ-অস্পষ্টতা প্রমাণ করা।

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


3
ঠিক আছে, শেষ অনুচ্ছেদে বর্ণিত সেই দর্শনের সাথে আপনার প্রতিটি লাইনের শেষে কোলন লাগতে পারে। সুস্পষ্ট বনাম অন্তর্নিহিত কেবল তখনই বোধগম্য হয় যদি সুস্পষ্টভাবে প্রকৃতপক্ষে তথ্য যুক্ত হয় (উদাহরণস্বরূপ: অন্তর্ভুক্ত রূপটি অস্পষ্ট)। যা ছিল আমার প্রশ্নের মূল বিষয়।
টোমা জ্যাটো - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.