মূর্খতা কি?


19

আমি "আইডিয়াম "টি একটি সাধারণ ক্রিয়াকলাপ বা প্যাটার্ন হিসাবে বুঝতে পারি যে কোনও নির্দিষ্ট ভাষায় মূল ভাষার বাক্য গঠন যেমন সরল সংখ্যায় পূর্ণসংখ্যা বৃদ্ধি হয় না:

i = i + 1;

সি ++ তে, এই প্রবাদটি অপারেটর দ্বারা সরল করা হয়েছে:

++i;

যাইহোক, যখন কেউ "আইডোমেটিক" শব্দটি ব্যবহার করেন, আমি কীভাবে এটি বুঝতে পারি তা নিশ্চিত নই। কোডটির একটি টুকরো "আইডিয়োমেটিক" কী করে?


এটি ইংরাজী.স্ট্যাকেক্সেঞ্জ ডটকমের মতোই এখানে রয়েছে।
এস .লট

@ perl.j: অন্তর্দৃষ্টিপূর্ণ। "আইডিয়োম্যাটিক" সংজ্ঞাটি ইংরাজী.স্ট্যাকেক্সচেঞ্জ ডটকমের অন্তর্গত নয় কেন আপনি সত্যই ব্যাখ্যা করেছেন। খুব উপকারী.
এসলট

উত্তর:


24

কিছু কোড লেখার একটি মূ id় উপায় হ'ল যখন আপনি ভাষা নির্দিষ্ট আইডিয়ামগুলির কারণে অন্য ভাষাগুলির কাছে খুব নির্দিষ্ট উপায়ে লিখেন।

উদাহরণস্বরূপ, সি ++ এ, RAII আইডিয়োমকে কাজে লাগিয়ে সি ++ কোড পরিচালনার সংস্থানগুলি যা মূর্খতার সাথে সম্পর্কিত leads

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

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


দুর্দান্ত বর্ণনা। সুতরাং সি # তে, আমি যদি TryAdd()জেনেরিক Dictionaryক্লাসে প্রথমে চেক করার !Contains()পরে কল করার জন্য একটি এক্সটেনশন পদ্ধতি তৈরি করি তবে Add()এটি কি মূর্খ হবে? আমি সি # - এক্সটেনশন পদ্ধতিতে নির্দিষ্ট একটি বৈশিষ্ট্য ব্যবহার করছি।
void.pointer

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

তবে এটি সি ++ নয়, সুতরাং "সি ++ উপায়" ব্যবহার করা "আইডোমেটিক" পর্যাপ্ত নাও হতে পারে। এখানে একটি এক্সটেনশন পদ্ধতি ব্যবহার করা যুক্তিসঙ্গত এবং খুব সি #-মত। যে কোনও ক্ষেত্রে এটি একটি উদাহরণ ছিল তবে এক্সটেনশন পদ্ধতিগুলি সি # তে খুব মূখ্য।
void.pointer

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

1
অবশ্যই অজগর আইডিয়োমেটিক কোড, অর্থাত্ পাইথোনিককে উল্লেখ করার মতো একটি অভিজাত পদ্ধতি রেখে আরও এক ধাপ এগিয়ে যায়। * 8 ')
মার্ক বুথ

12

সাধারণ সংজ্ঞা

নেটিভ স্পিকারের পক্ষে প্রাকৃতিক অভিব্যক্তিগুলি ব্যবহার করা, ধারণ করা বা বোঝানো

প্রোগ্রামিং সংজ্ঞা

[সন্নিবেশিত ভাষা] প্রোগ্রামারটির কাছে প্রাকৃতিক অভিব্যক্তিগুলি ব্যবহার করা, ধারণ করা বা চিহ্নিতকরণ


1
যদি আমি এই পদটির জন্য "গুগল" সংজ্ঞাগুলি সহায়ক বলে মনে করি আমি এখানে পোস্ট করতাম না। আমি উদাহরণ সহ আরও ভাল বর্ণনা (টিউটোরিয়াল-মত) চেয়েছিলাম।
void.pointer

3
@ রবার্ট - আমার ধারণা আপনি কেন বুঝতে পারছেন না তা আমি বুঝতে পারি না।
কেওসপ্যান্ডিয়ন

2
আমি প্রথমে আপনার উত্তরটি পড়েছি, এটি বেশ পরিষ্কার ছিল না। আমার উত্তর হিসাবে চিহ্নিত প্রতিক্রিয়াটি পড়ার পরে, "আইডোমেটিক" বলতে কী বোঝায় তা খুব স্পষ্ট হয়ে গেছে এবং আমি এখন এটি বুঝতে পারি। এখন যে আমি আপনার উত্তরটি পড়েছি তা বোঝা যায়। তবে, আপনি আমাকে উদাহরণ এবং বিভিন্ন দৃশ্যের মধ্য দিয়ে চলতে পারেননি, এ কারণেই আমি মনে করি আপনার উত্তরটি তেমন সহায়ক ছিল না। আপনি একটি "ওয়েবস্টার" প্রতিক্রিয়া দিয়েছেন যা প্রযুক্তিগতভাবে সঠিক তবে আমাকে বুঝতে যতটা সহায়তা করে ততটা সহায়ক নয়। আমি যদিও আপনার সাহায্যের প্রশংসা করি।
void.pointer

7

প্রোগ্রামিংয়ের প্রসঙ্গে আইডোমেটিককে সাধারণত "একটি ভাষায় কিছু প্রকাশ করার সবচেয়ে প্রাকৃতিক উপায়" হিসাবে সংজ্ঞায়িত করা যায়

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

দ্রষ্টব্য যে কেবল কোডের একটি অংশটি মূio়রকম, এর অর্থ এই নয় যে এটি পরিষ্কার বা সংক্ষিপ্ত। অনেক সময় আপনাকে আপোস করতে হবে।

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

উদাহরণস্বরূপ আইডেম্যাটিক ইংরেজি অঞ্চলটির উপর নির্ভর করতে পারে। শব্দটি ব্যবহার bumসম্ভবত যুক্তরাজ্যের ইংরাজির জন্য প্রয়োজন, অন্যদিকে ইউএস ইংলিশের পক্ষে buttএটি আরও উপযুক্ত। (দুঃখের সাথে আমি বেশি ইউকে ইংরেজি জানি না: /)


ধন্যবাদ (উত্সাহিত), আমি মনে করি আপনার সংজ্ঞাটি ঠিক আমার জন্য এটি ঘটেছে!
আশামান কিংপিন

3

মূর্খতাপূর্ণ এমন কোনও কিছুর জন্য আমি আমার মাথার উপরের অংশটি বেছে নিতে পারি তার সেরা উদাহরণটি রুবি থেকে এসেছে।

প্রচুর ভাষায়, আপনি এর সাথে পুনরাবৃত্তি করতে পারেন:

for( start; end; increment){
    code;
}

বা খুব অনুরূপ কিছু। অনেক ভাষার একটি foreach(x in SetOfXes)নির্মাণও রয়েছে। তবে রুবির কাছে মূর্তিযুক্ত পুনরাবৃত্তির মধ্যে অন্তর্ভুক্ত রয়েছে:

collection.each do |current|
  current.do_stuff
end

আর যদি

10.times do |x|
  puts x
end

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

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


এর collection.each do |current|থেকে আলাদা কীভাবে foreach(current in collection)? দুটিই লুপ কনস্ট্রাক্টস যা currentপ্রতিটি উপাদানকে সেট করে collection
ম্যাসাল্টার

2

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

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


উইকিপিডিয়া ইনক্রিমেন্টিংকে উদাহরণ হিসাবে ব্যবহার করেছিল, তাই আমি আমার প্রশ্নে এটি উল্লেখ করেছি। কেন প্রজ্ঞাবান জটিল হতে হবে? এটি অন্যান্য উত্তরের উপর ভিত্তি করে সংজ্ঞাটির অংশ বলে মনে হচ্ছে না।
void.pointer

4
@ রবার্ট ডেইলি: কীভাবে বর্ধন করা সম্ভবত মূর্খতা হতে পারে? এটি ভাষার অংশ । আইডিয়ামগুলি কোনও ভাষার ব্যবহারকারী দ্বারা তৈরি করা হয়, সময়ের সাথে সাথে তারা পরিবর্তিত হয়। বর্ধন কোনও প্রতিমা নয়, এটি ভাষার একটি প্রাথমিক কার্যকারিতা। এই যুক্তিটি গ্রহণ করে, আমি বলতে পারি যে অন্য যে কোনও মৌলিক ভাষার ফাংশন একটি মূর্খতা, এবং সেইজন্য প্রতিটি প্রোগ্রামই মূio় হয়, যা তা নয়।
ডেডএমজি

2

আপনার সংজ্ঞা আমাকে সঠিক হিসাবে আঘাত করে না। একটি প্রতিমা হ'ল এমন কিছু রাইটিংয়ের একটি উপায় যা অন্য ভাষায়ও হতে পারে বা নাও পারে, তবে এই ভাষায় এটি সাধারণ বিষয়। সাধারণত, এটি বিকল্পের চেয়ে ছোট, তবে এটি আসলে প্রয়োজন নয়।

অ-প্রতিমাসূচক কি তা নিয়ে কথা বলার মাধ্যমে এটি ব্যাখ্যা করা আরও সহজ হতে পারে। সি ++ এ, এটি লিখতে বেশ বুদ্ধিমানের:

Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p)
{
 // whatever
}

এটি লেখার জন্য আরও বুদ্ধিমান:

Foo* p; 
if(p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
{
 // whatever
}

এই কোডটি ঠিক একই জিনিসটি করে - কিছু লোক যারা সি ++ তে নতুন তারা এটি পরীক্ষা হিসাবে পড়তে পারে এটি দেখতে যে পি ফাংশনটি কী দেয় তার সমান হয় তবে এটি এটি করে না।

যে কোনও ব্যক্তি কী লিখতে পারে তার সাথে তুলনা করুন, খুব অহঙ্কারমূলক, যিনি অন্য ভাষা থেকে এসেছেন:

Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
 // whatever
}

আপনি এই স্টাফটিকে অ-প্রতিমাসূচক হিসাবে ছিটকে দেখবেন:

if (x>0)
  return true;
else
 return false;

কারণ মূর্খতা পদ্ধতির হয়

return (x>0);

অহঙ্কারী উপায়গুলি ভুল নয়, তবে তারা সাধারণত টাইপ করতে বেশি সময় নেয় এবং যারা বুদ্ধিজীবী জানেন তাদের জন্য তারা পড়তে বেশি সময় নেয়। আমি যদি আপনাকে "নেকড়ে ছেলেটির কান্নাকাটি" বলি এবং আপনি গল্পটি জানেন তবে মিথ্যা বিপদাশঙ্কা কীভাবে লোকেরা আপনাকে উপেক্ষা করতে বাধ্য করে তা সম্পর্কে যদি আমি ব্যাখ্যা করি তবে তার চেয়ে দ্রুত er সমস্যাটি অবশ্য হ'ল যদি আপনি গল্পটি না জানেন এবং জানতেন না যে নখের নখের কী জিনিস রয়েছে যার সাথে আমরা কী বলছি। একইভাবে, আপনি যদি return x<y;আগে কখনও না দেখে থাকেন এবং সত্যিই এটি কী করে তা জানেন না তবে সমস্যা হতে পারে।


1
মুশকিল পদ্ধতির অবশ্যই অবশ্যই যদি অবস্থার মধ্যে পয়েন্টারটি ঘোষণা করা হয় , যাতে এটি কখনই অ্যাক্সেস করা যায় না যদি এটি NULL না হয়। if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
ডেডএমজি

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

1

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

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