অপারেটরগুলি কীওয়ার্ড বা ফাংশনগুলির চেয়ে পড়ার জন্য আরও পরিষ্কার হয়? [বন্ধ]


14

এটি কিছুটা সাবজেক্টিভ, তবে আমি কী কারণে কোন অপারেটরকে বনাম ওষুধ ব্যবহার করা ও মুশকিল ব্যবহার করা স্পষ্ট করে তোলে তার একটি পরিষ্কার বোঝার আশা করছি। আমি সম্প্রতি ভাষার নকশাগুলি বিবেচনা করছি এবং আমি যে বিষয়টি সর্বদা ঘুরে দেখি তা হ'ল ভাষাতে কোনও অপারেটর কখন তৈরি করা যায় এবং কখন কীওয়ার্ড বা ফাংশন ব্যবহার করতে হয়।

হাস্কেল এটির জন্য কিছুটা কুখ্যাত, কারণ কাস্টম অপারেটরগুলি তৈরি করা সহজ এবং প্রায়শই একটি নতুন ডেটা টাইপ বিভিন্ন অপারেটরের সাথে এটি ব্যবহারের জন্য প্যাকেজড আসে। পার্সেক গ্রন্থাগার উদাহরণস্বরূপ, পার্সারগুলিকে একত্রে সংযুক্ত করার জন্য একাধিক অপারেটর নিয়ে আসে, যেমন রত্নগুলির সাথে >.এবং .> আমি এখনই তাদের অর্থ কী তা মনে করতে পারি না, তবে আমি স্মরণ করি যে এগুলি একবার মুখস্থ করার পরে আমি তাদের সাথে কাজ করা খুব সহজ ছিল remember তারা আসলে বোঝায়। যেমন একটি ফাংশন কল leftCompose(parser1, parser2)ভাল ছিল? অবশ্যই আরও ভার্বোজ, তবে কিছু উপায়ে আরও স্পষ্ট।

সি-জাতীয় ভাষায় অপারেটর ওভারলোডগুলি একটি অনুরূপ সমস্যা, তবে পরিচিত অপারেটরগুলির অর্থ ওভারলোডিংয়ের অতিরিক্ত সমস্যার +সাথে অস্বস্তিকর নতুন অর্থের সাথে জড়িত lated

যে কোনও নতুন ভাষায়, এটি বেশ শক্ত সমস্যা বলে মনে হবে। F # তে, উদাহরণস্বরূপ, ingালাই সি # স্টাইলের castালাই সিনট্যাক্স বা ভার্বোজ ভিবি স্টাইলের পরিবর্তে গাণিতিকভাবে প্রাপ্ত টাইপ-কাস্টিং অপারেটর ব্যবহার করে। সি #: (int32) xভিবি: CType(x, int32)এফ #:x :> int32

তাত্ত্বিকভাবে একটি নতুন ভাষার বেশিরভাগ অন্তর্নির্মিত কার্যকারিতার জন্য অপারেটর থাকতে পারে। বদলে defবা decবা varপরিবর্তনশীল ঘোষণা, কেন না জন্য ! nameবা @ nameবা অনুরূপ কিছু। এটি অবশ্যই বাধ্যবাধকতার পরে বাধ্যতামূলক সংক্ষিপ্ত করে তোলে: @x := 5পরিবর্তে declare x = 5বা let x = 5 সর্বাধিক কোডে প্রচুর ভেরিয়েবল সংজ্ঞা প্রয়োজন হয়, তবে কেন নয়?

কখন কোনও অপারেটর পরিষ্কার এবং দরকারী এবং কখন এটি অস্পষ্ট হয়?



1
আমি আশা করি যে জাভা এর অপারেটর ওভারলোডিংয়ের অভাব সম্পর্কে আমার কাছে কখনও অভিযোগ করেছেন এমন 1000 বিকাশকারীদের মধ্যে একটি এই প্রশ্নের উত্তর দেবে।
smp7d

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

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

2
@ আসন্ন ঝড়: আমি আসলে হাস্কেলের পথ আরও ভাল বলে মনে করি। যখন আপনি অপারেটরের একটি সীমাবদ্ধ সেট থাকে যা আপনি বিভিন্ন উপায়ে ওভারলোড করতে পারেন, আপনি প্রায়শই বিভিন্ন প্রসঙ্গে অপারেটরদের পুনরায় ব্যবহার করতে বাধ্য হন (যেমন +স্ট্রিং কনটেন্টেশন বা <<স্ট্রিমের জন্য)। অন্যদিকে, হাস্কেলের সাথে অপারেটর হ'ল হয় কেবল একটি কাস্টম নাম (যা অতিরিক্ত বোঝা নয়) সহ একটি ফাংশন বা কোনও ধরণের শ্রেণীর অংশ যার অর্থ এটি বহুমুখী হলেও, এটি প্রতিটি ধরণের জন্য একই যুক্তিযুক্ত কাজ করে এবং এমনকি একই ধরণের স্বাক্ষর রয়েছে। সুতরাং >>হয় >>প্রতি টাইপ জন্য এবং কখনও একটি বিট স্থানান্তর হতে যাচ্ছে।
টিখন জেলভিস

উত্তর:


16

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

এই সমস্ত সিদ্ধান্ত অবশেষে নেমে আসে আপনি কীভাবে স্বরলিপিটি পড়তে চান এবং আপনি যেমনটি বলেছিলেন বিষয়ভিত্তিক, যদিও কেউ কিছু সুস্পষ্ট যৌক্তিকতা তৈরি করতে পারে যেমন: গণিতের জন্য সাধারণ ইনফিক্স অপারেটরগুলি ব্যবহার করুন কারণ প্রত্যেকে সেগুলি জানে

সর্বশেষে ডিজকસ્ત્રা তাঁর ব্যবহৃত গাণিতিক স্বরলিপিগুলির একটি আকর্ষণীয় ন্যায়সঙ্গত রচনা লিখেছিলেন , যার মধ্যে ইনফিক্স বনাম উপসর্গের চিহ্নগুলির ট্রেড অফগুলির একটি ভাল আলোচনা রয়েছে


4
ডিজকস্ট্র কাগজের লিঙ্কটির জন্য আমি আপনাকে একটি দ্বিতীয় +1 দিতে চাই।
এপ্রোগ্রামার

দুর্দান্ত লিঙ্ক, আপনাকে একটি পেপাল অ্যাকাউন্ট প্রকাশ করতে হয়েছিল! ;)
অ্যাড্রিয়ানো রেপিটি

8

আমার কাছে, কোনও অপারেটর কার্যকর হওয়া বন্ধ করে দেয় যখন আপনি আর জোরে বা আপনার মাথায় কোডের লাইনটি পড়তে পারবেন না এবং তা বোঝা যায়।

উদাহরণস্বরূপ, declare x = 5পড়া হিসাবে "declare x equals 5"বা হিসাবে let x = 5পড়া যেতে পারে "let x equal 5", যা জোরে জোরে পড়ার সময় খুব বোধগম্য হয়, তবে পড়াটি (বা আপনি যদি গণিতবিদ হন) @x := 5হিসাবে পড়েন তবে তা মোটেই বোঝা যায় না।"at x colon equals 5""at x is defined to be 5"

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


5
আমি মনে করি না যে @x := 5এটি নির্ধারণ করা শক্ত - আমি এখনও এটি নিজের মতো করে উচ্চস্বরে পড়ি set x to be equal to 5
হতাশ

3
@ রাচেলের, সেই ক্ষেত্রে, :=প্রোগ্রামিং ভাষার বাইরে গাণিতিক স্বরলিপিগুলির ব্যাপক ব্যবহার রয়েছে। এছাড়াও, বিবৃতি x = x + 1কিছুটা অযৌক্তিক হয়ে ওঠে।
ccoakley

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

1
@ccoakley ধন্যবাদ, আমি জানি না যে :=গণিতে ব্যবহৃত হয়েছিল। এটির জন্য আমি যে একটি সংজ্ঞা পেয়েছি সেটি "সংজ্ঞায়িত করা হয়েছে" তাই @x := 5ইংরেজিতে অনুবাদ করা হবে "at x is defined to be 5", যা এখনও আমার কাছে যতটা বোঝা উচিত তা বোঝায় না।
রাহেল

1
অবশ্যই পাস্কাল ব্যবহৃত হয়েছে: = ASCII- এ বাম-তীরের অভাবের জন্য, অ্যাসাইনমেন্ট হিসাবে।
ভ্যাটাইন

4

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

তবে আরেকটু খনন করার ক্ষেত্রে দুটি দিক রয়েছে।

সিনট্যাক্স (ফাংশন কল সিনট্যাক্সের উপসর্গের বিপরীতে অপারেটরের জন্য ইনফিক্স) এবং নামকরণ।

বাক্যবিন্যাসের জন্য, অন্য একটি ক্ষেত্রে রয়েছে যেখানে ইনফিক্স প্রিফিক্সের তুলনায় যথেষ্ট স্পষ্ট যে এটি পরিচিত হয়ে ওঠার চেষ্টাটির বার বার হতে পারে: যখন কলগুলি শৃঙ্খলাবদ্ধ থাকে এবং বাসা বেধে থাকে।

বা এর a * b + c * d + e * fসাথে তুলনা করুন (উভয়ই ইনফিক্স সংস্করণ হিসাবে একই অবস্থায় পার্সেবল)। সত্য যে আলাদা পরিবর্তে একটি দীর্ঘ পথ দ্বারা তাদের একজন পূর্ববর্তী পদ আমার চোখে এটি আরো পাঠযোগ্য করতে (কিন্তু আপনি প্রাধান্য নিয়ম যা উপসর্গ সিনট্যাক্স জন্য প্রয়োজন হয় না মনে রাখতে হবে)। আপনার যদি এইভাবে জিনিসগুলিকে যৌগিক প্রয়োজন হয় তবে দীর্ঘমেয়াদী বেনিফিট উপায়টি পড়াশোনার ব্যয়টি উপযুক্ত। এবং আপনি এই সুবিধাটি রাখেন এমনকি আপনি প্রতীক ব্যবহারের পরিবর্তে চিঠি দিয়ে আপনার অপারেটরদের নাম রাখেন।+(+(*(a, b), *(c, d)), *(e, f))+ + * a b * c d * e f+

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

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


যদি ব্যবহারকারীগণ অপারেটরগুলিকে যুক্ত করতে পারেন তবে তারা যে অপারেটরগুলি যুক্ত করেছে তাদের অগ্রাধিকার এবং সাহচর্যতা সেট করতে দিবে না কেন?
টিখন জেলভিস

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

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

1

অপারেটর-হিসাবে-প্রতীকগুলি যখন তারা স্বজ্ঞাতভাবে বুদ্ধি করে তা কার্যকর হয়। +এবং -স্পষ্টতই সংযোজন এবং বিয়োগফল, উদাহরণস্বরূপ, এ কারণেই প্রতিটি ভাষা তাদের অপারেটর হিসাবে কখনও ব্যবহার করে। তুলনা সঙ্গে একই ( <এবং >গ্রেড স্কুল শেখানো হয়, এবং <=এবং >=মৌলিক তুলনা স্বজ্ঞাত এক্সটেনশন যখন আপনি বুঝতে যে সেখানে আদর্শ কীবোর্ড কোন আন্ডারলাইন-তুলনা কি হয়।)

*এবং /কম অবিলম্বে সুস্পষ্ট, কিন্তু তারা সর্বজনীন ব্যবহার করছি এবং ডান পাশে সাংখ্যিক কীপ্যাড তার অবস্থান +এবং -কী সাহায্য করে কনটেক্সট প্রদান। সি এর <<এবং >>একই বিভাগে রয়েছে: আপনি যখন বাম-শিফট এবং ডান-শিফট কী তা বুঝতে পারেন, তীরগুলির পিছনে স্মৃতিবিজ্ঞানগুলি বোঝা খুব বেশি কঠিন নয়।

তারপরে আপনি আসেন কিছু সত্যই অদ্ভুত জিনিস, এমন জিনিস যা সি কোডটি অপঠনযোগ্য অপারেটর স্যুপে রূপান্তর করতে পারে। (সিটিতে এখানে বাছাই কারণ এটি একটি খুব অপারেটর-ভারী উদাহরণ, যার বাক্য গঠনটি সি এর সাথে কাজ করার মাধ্যমে বা বংশোদ্ভূত ভাষার সাথে পরিচিত হয়ে প্রত্যেকেই পরিচিত)) উদাহরণস্বরূপ, তারপরে %অপারেটর। সবাই জানেন যে এটি কী: এটি শতাংশের চিহ্ন ... তাই না? সি ব্যতীত এটির 100 ভাগ করে ভাগ করার কোনও সম্পর্ক নেই; এটা মডুলাস অপারেটর। এটি স্মৃতিগতভাবে শূন্য অর্থে তৈরি করে, তবে এটি সেখানে!

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

এবং কেবল এটিকে আরও খারাপ করার জন্য, &এবং *অপারেটরগুলি সম্পূর্ণ আলাদা আলাদা জিনিসের জন্য পুনরায় ব্যবহৃত হয়, যা ভাষা এবং সংকলক উভয়কে পার্স করার পক্ষে ভাষাকে আরও শক্ত করে তোলে। (এর A * Bঅর্থ কী? এটি পুরোপুরি প্রসঙ্গে নির্ভর করে: Aকোনও প্রকার বা পরিবর্তনশীল?)

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

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


4
পাস্কাল মোটেও আলাদা দর্শনের প্রতিনিধিত্ব করে না। আপনি যদি উইথের কাগজপত্র পড়েন তবে তিনি সর্বদা andএবং orসর্বদা সময়ের জন্য প্রতীক ব্যবহার করেছিলেন। যখন তিনি পাস্কালটি বিকাশ করেছিলেন, তবে তিনি এটি একটি নিয়ন্ত্রণ ডেটা মেইনফ্রেমে করেছিলেন, যা 6-বিট অক্ষর ব্যবহার করে। যে অনেক কিছু ব্যবহারের কথা সিদ্ধান্ত বাধ্য, সহজ কারণ জন্য যে অক্ষর সেট কেবল করা হয়নি আছে এমন হওয়া ASCII ভালো কিছু যেমন চিহ্ন জন্য অনেক স্থান ও প্রায়। আমি সি এবং পাস্কাল উভয়ই ব্যবহার করেছি এবং সি যথেষ্ট পরিমাণে পাঠযোগ্য। আপনি পাস্কেলকে পছন্দ করতে পারেন তবে এটি স্বাদের বিষয়, সত্য নয়।
জেরি কফিন

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

@ এপ্রোগ্রামার: এবং তারা কখনও কোথাও যায় নি। ;)
ম্যাসন হুইলারের

আমি মনে করি |(এবং, এক্সটেনশন দ্বারা ||) এর জন্য বা বোধগম্য। ব্যাকরণগুলির মতো আপনি অন্যান্য প্রসঙ্গে পাল্টানোর জন্য এটি সর্বদা দেখেন এবং দেখে মনে হয় এটি দুটি বিকল্পকে বিভক্ত করছে।
টিখন জেলভিস

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

1

আমি মনে করি যখন অপারেটরগুলি তাদের পরিচিত, গাণিতিক উদ্দেশ্যটি ঘনিষ্ঠভাবে মিরর করে। উদাহরণস্বরূপ, স্ট্যান্ডার্ড অপারেটর যেমন যেমন +, - ইত্যাদি সংযোজন এবং বিয়োগফল সম্পাদন করার সময় অ্যাড বা বিয়োগফলের চেয়ে বেশি পঠনযোগ্য। অপারেটরের আচরণ অবশ্যই স্পষ্টভাবে সংজ্ঞায়িত করা উচিত। উদাহরণস্বরূপ, তালিকাবদ্ধকরণের জন্য + এর অর্থের একটি বোঝা আমি সহ্য করতে পারি। আদর্শভাবে অপারেশনটির পার্শ্ব প্রতিক্রিয়া হবে না, পরিবর্তনের পরিবর্তে কোনও মান ফিরিয়ে দেবে।

আমি ভাঁজের মতো ফাংশনগুলির জন্য শর্টকাট অপারেটরদের সাথে লড়াই করেছি। একথাও ঠিক যে তাঁদের সঙ্গে আরো অভিজ্ঞতা এই আরাম, কিন্তু আমি খুঁজে foldRightচেয়ে বেশি পাঠযোগ্য /:


4
সম্ভবত ব্যবহারের ফ্রিকোয়েন্সিও এর মধ্যে চলে আসে। আমি আপনাকে foldপ্রায়শই যথেষ্ট মনে করি না যে কোনও অপারেটর পুরো সময়টি সাশ্রয় করে। এটিও হতে পারে যে এলআইএসপি (+ 1 2 3) অদ্ভুত বলে মনে হয় তবে (1 2 3 যোগ করুন) তাই কম। আমরা অপারেটরদের কঠোরভাবে বাইনারি হিসাবে ভাবার প্রবণতা রাখি। পার্সেকের >>.স্টাইল অপারেটরগুলি বোকা হতে পারে তবে পার্সেক- তে অন্তত প্রাথমিক জিনিসটি পার্সার সংযুক্ত করা, সুতরাং এর জন্য অপারেটররা প্রচুর ব্যবহার পেতে পারে।
কোডেক্সআর্কানিয়াম

1

অপারেটরগুলির মধ্যে সমস্যাটি হ'ল সংবেদনশীল (!) পদ্ধতির নামের তুলনায় তাদের কেবলমাত্র একটি অল্প সংখ্যক রয়েছে যা পরিবর্তে ব্যবহার করা যেতে পারে। একটি পার্শ্ব প্রতিক্রিয়া হ'ল ব্যবহারকারী-সংজ্ঞাযোগ্য অপারেটররা প্রচুর ওভারলোডিং প্রবর্তনের প্রবণতা রাখে।

অবশ্যই লাইনটি C = A * x + b * cলেখার চেয়ে পড়ার চেয়ে সহজ C = A.multiplyVector(x).addVector(b.multiplyScalar(c))

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

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

আপনি যখন এমন সফ্টওয়্যার তৈরি করেন যা জটিল অঞ্চলে যায় তখন জিনিসগুলি আলাদা হয়। নিরাপত্তা সমালোচনা সামগ্রী। নিরাপত্তা। সফ্টওয়্যার যা বিমানগুলিকে বাতাসে রাখে বা পারমাণবিক সুবিধাগুলি চালিত রাখে। বা এমন সফ্টওয়্যার যা আপনার অত্যন্ত গোপনীয় ইমেলগুলি এনক্রিপ্ট করে।

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

সুতরাং, মূল প্রশ্নে যেমনটি বলা হয়েছে, এটি একটি অত্যন্ত বিষয়গত বিষয়। অপারেটরগুলি কীভাবে ব্যবহার করা উচিত সে সম্পর্কে অনেক পরামর্শ পুরোপুরি সংবেদনশীল মনে হতে পারে, তবে তাদের মধ্যে কেবল কয়েকটি সংমিশ্রণ দীর্ঘমেয়াদে অনেক সমস্যার সৃষ্টি করতে পারে।


0

আমি মনে করি এর চরম উদাহরণটি এপিএল হ'ল নিম্নলিখিত প্রোগ্রামটি হ'ল "জীবনের খেলা":

life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵}

এবং যদি আপনি রেফারেন্স ম্যানুয়ালটি দিয়ে কয়েক দিন ব্যয় না করে এর অর্থ কী তা কাজ করতে পারেন তবে আপনাকে শুভকামনা!

সমস্যাটি হ'ল আপনার কাছে এমন একটি চিহ্ন রয়েছে যা প্রায় প্রত্যেকে স্বজ্ঞাতভাবে বোঝে: +,-,*,/,%,=,==,&

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

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