"সহজেই বিতর্ক করা" - এর অর্থ কী? [বন্ধ]


49

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

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

প্রশ্ন: আপনি কি "যুক্তিযুক্ত পক্ষে সহজ নয়" এর কয়েকটি উদাহরণ সরবরাহ করতে পারেন, সুতরাং এটি "যুক্তিযুক্ত সহজ বিষয়ে" উদাহরণগুলির সাথে তুলনা করা যায়?


4
@ মার্টিনম্যাট আরও একটি সুনির্দিষ্ট বাক্যাংশ যা ব্যাপকভাবে ব্যবহৃত হয় তা সমীকরণীয় যুক্তি, আমি পরামর্শ দেব যে এটি ফ্যাবিও পরে যা হতে পারে
জে.কে।

3
আমি এই ধরণের জিনিসটির জন্য "জ্ঞানীয় লোড" শব্দটি ব্যবহার করতে চাই ।
বাল্ড্রিক

16
আপনি কি জানেন যে প্রোগ্রামগুলির কি যুক্তি মানে?
বার্গি

5
অপ্রাতিষ্ঠানিক অর্থে, আমি এটি বোঝাতে চাইছি যে কোনও সমাধান খুব সহজেই বোঝা যায় (সাধারণত) পরীক্ষা না করে কোনও প্রদত্ত ইনপুটটির জন্য কী ফলাফল হবে। এর অর্থ হ'ল যে কোনও ইনপুটগুলির জন্য ফলাফলগুলি উদ্বেগজনক হবে। উদাহরণস্বরূপ, অ-সুস্পষ্ট কোণার কেস রয়েছে এমন সমাধানগুলি সম্পর্কে তর্ক করা শক্ত। প্রধানত আমি দৃust়তার প্রসঙ্গে এটি ব্যবহার করি।
জিমি জেমস

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

উত্তর:


58

আমার মতে, "পক্ষে যুক্তিযুক্ত সহজ" বাক্যাংশটি এমন কোডকে বোঝায় যে "আপনার মাথায় চালানো" সহজ।

কোডের কোনও অংশের দিকে তাকানোর সময়, যদি এটি সংক্ষিপ্ত, স্পষ্টভাবে লিখিত হয়, ভাল নাম এবং মানগুলির নূন্যতম রূপান্তর সহ, তবে কোডটি যা করে তা মানসিকভাবে কাজ করা একটি (অপেক্ষাকৃত) সহজ কাজ।

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


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

4
আমি কখনই আমার মাথায় কোড চালাতে চাই না । এটি আমার কাছে চূড়ান্ত অনুষ্ঠান হবে "তর্ক করা সহজ নয়"। আমি কম্পিউটার কী করবেন সম্পর্কে ভবিষ্যদ্বাণীপূর্ণ বিবৃতি করতে সক্ষম হতে চায় ছাড়া এটা নির্বাহ। "পক্ষে যুক্তিযুক্ত সহজ" কোডটি এমন কোড যা আপনার মাথায় মৃত্যুদন্ড কার্যকর করতে হয় না, পরিবর্তে এটি যুক্তিযুক্ত হতে পারে।
কর্ন

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

3
@ পোলিগনোম কোড সম্পর্কে যৌক্তিকতা সাধারণত খুব দুর্দান্ত যত্ন এবং গাণিতিক পদ্ধতির সাথে করা হয় না। আমি যখন এটি লিখছি, লোকেরা আনুষ্ঠানিকভাবে কোড সম্পর্কে যুক্তি দিয়ে গণিতের পন্থাগুলিকে কয়েক মিলিয়ন করে ছাড়িয়েছে, কমপক্ষে, বা তাই আমি গণনা করি।
কাজ

2
@ পলিগনোম "Code easy to reason about" almost exclusively alludes to its mathematical properties and formal verification- যা মোটামুটি প্রশ্নের উত্তরের মতো শোনাচ্ছে। মন্তব্যে (বিষয়গত) উত্তর কী তা নিয়ে দ্বিমত পোষণ না করে আপনি উত্তর হিসাবে পোস্ট করতে চাইতে পারেন।
ডিউক্লিং

47

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

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

বিপরীতভাবে, রাষ্ট্রের সাথে কোনও বস্তু সম্পর্কে তর্ক করা খুব কঠিন, কারণ কোনও পদ্ধতি বলা হওয়ার সাথে সাথে আপনাকে বস্তুটির অবস্থানটি বিবেচনায় নিতে হবে, যার অর্থ আপনাকে অন্যান্য চিন্তাভাবনা করতে হবে যে অন্যান্য পরিস্থিতি কী কারণে অবজেক্টের মধ্যে রয়েছে? নির্দিষ্ট রাষ্ট্র

এর চেয়েও খারাপ হল বৈশ্বিক চলক: এমন একটি বৈশ্বিক ভেরিয়েবল পড়ার কোড সম্পর্কে যুক্তিযুক্ত কারণগুলি আপনাকে বুঝতে হবে যে আপনার কোডে ভেরিয়েবলটি কোথায় সেট করা যায় এবং কেন - এবং এই সমস্ত জায়গাগুলি খুঁজে পাওয়া সহজও নাও হতে পারে।

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


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

4
আমি যোগ করব যে মাল্টিথ্রেডেড দৃশ্যে আপনার কোডটি নিম্নোক্ত স্তরের কী নির্দেশনা দেয় সে সম্পর্কে আপনারও যথাযথ গভীর ধারণা থাকতে হবে: একটি অপারেশন যা উত্সে পারমাণবিক দেখায় তাতে প্রকৃত বাস্তবায়নে অপ্রত্যাশিত বাধা থাকতে পারে।
জ্যারেড স্মিথ

6
@ স্টিভ জেসোপ: আসলে এই বিষয়টিকে প্রায়শই উপেক্ষা করা হয়। চুপচাপ ওভারডিবিলিটি ডিফল্ট করার পরিবর্তে কোনও পদ্ধতিকে ওভারডেবল হতে চাইলে সি # আপনাকে বলার কারণ রয়েছে ; আমরা এই মুহুর্তে "আপনার প্রোগ্রামের সঠিকতা কোডের উপর নির্ভর করতে পারে যে আপনি সংকলনের সময় খুঁজে পাবেন না" এই মুহূর্তে একটি পতাকা waveেউ করতে চাই। (এটি বলেছিল, আমি এটিও চাই যে "সিল করা" সি # এর ক্লাসগুলির জন্য ডিফল্ট ছিল))
এরিক লিপার্ট

@ এরিকলিপার্ট sealedডিফল্ট না হওয়ার চূড়ান্ত কারণগুলি কী ছিল ?
জেভ স্পিটজ

@ জেভস্পিট্জ: আমার সিদ্ধান্তের অনেক আগেই এই সিদ্ধান্ত নেওয়া হয়েছিল; আমি জানি না।
এরিক লিপার্ট

9

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

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

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

তবে অন্যান্য অনেকগুলি বিষয় রয়েছে যা সম্পর্কে যুক্তিযুক্ত হওয়া আরও কঠিন এবং আমি @ কিলিয়ান এর সাথে একমত যে সম্মতিটি একটি প্রধান উদাহরণ। বিতরণ সিস্টেমও।


5

বিস্তৃত আলোচনা এড়ানো এবং নির্দিষ্ট প্রশ্নের সমাধান করা:

আপনি কি "পক্ষে যুক্তিযুক্ত পক্ষে সহজ নয়" এর কয়েকটি উদাহরণ সরবরাহ করতে পারেন, সুতরাং এটি "যুক্তিযুক্ত পক্ষে সহজ" উদাহরণগুলির সাথে তুলনা করা যায়?

আমি আপনাকে "দ্য স্টোরি অফ মেল, একটি রিয়েল প্রোগ্রামার" - উল্লেখ করি যা প্রোগ্রামার লোককাহিনীর একটি অংশ যা ১৯৮৩-এ রয়েছে এবং তাই আমাদের পেশার জন্য 'কিংবদন্তি' হিসাবে গণ্য।

এটি এমন একটি প্রোগ্রামার রাইটিং কোডের কাহিনী বলছে যা স্ব-রেফারেন্সিয়াল এবং স্ব-সংশোধনকারী কোড এবং মেশিন বাগের ইচ্ছাকৃত শোষণ সহ যেখানেই সম্ভব আরকেন কৌশল পছন্দ করত:

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

এটি কোডের একটি উদাহরণ যা সম্পর্কে 'তর্ক করা কঠিন'।

অবশ্যই মেল দ্বিমত পোষণ করবে ...


1
আমার বহুবর্ষজীবী প্রিয় মেলের গল্পটি উল্লেখ করার জন্য +1।
জন বলিঞ্জার

3
মেল স্টোরিটি এখানে পড়ুন , যেহেতু উইকিপিডিয়া নিবন্ধটি এর সাথে লিঙ্ক করে না।
ট্রিগ

পৃষ্ঠায় @TRiG পাদটীকা 3, না?
আকাশম

@ আকাশম কোনওভাবে এটি মিস করতে পেরেছেন।
ট্রিগ

5

আমি একটি উদাহরণ এবং খুব সাধারণ একটি প্রদান করতে পারি।

নিম্নলিখিত সি # কোড বিবেচনা করুন।

// items is List<Item>
var names = new List<string>();
for (var i = 0; i < items.Count; i++)
{
    var item = items[i];
    var mangled = MyMangleFunction(item.Name);
    if (mangled.StartsWith("foo"))
    {
        names.Add(mangled);
    }
}

এখন এই বিকল্প বিবেচনা করুন।

// items is List<Item>
var names = items
    .Select(item => MyMangleFunction(item.Name))
    .Where(s => s.StartsWith("foo"))
    .ToList();

দ্বিতীয় উদাহরণে, আমি জানি যে এই কোডটি এক নজরে কী করছে। আমি যখন দেখি Select, আমি জানি আইটেমের একটি তালিকা অন্য কিছুর তালিকায় রূপান্তরিত হচ্ছে। যখন আমি দেখি Where, আমি জানি যে নির্দিষ্ট আইটেমগুলি ফিল্টার করা হচ্ছে। এক নজরে, আমি কী বুঝতে পারি namesএবং এটির কার্যকর ব্যবহার করতে পারি।

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

শেষ পর্যন্ত, এখানে যুক্তি করা সহজ হওয়া লিনকিউ পদ্ধতিগুলি Selectএবং বোঝার উপরও নির্ভর করে Where। যদি আপনি এগুলি না জানেন তবে দ্বিতীয় কোডটি প্রাথমিকভাবে সম্পর্কে तर्क করা শক্ত। তবে আপনি একবারে সেগুলি বোঝার জন্য কেবলমাত্র মূল্য দিতে হবে। আপনি যখন forএকবার পরিবর্তন করে প্রতিবার একবার এবং একবার ব্যবহার করেন তখন লুপটি বোঝার জন্য আপনি অর্থ প্রদান করে। কখনও কখনও ব্যয়টি মূল্য দিতে হয় তবে সাধারণত "তর্ক করার পক্ষে সহজ" হওয়া অনেক বেশি গুরুত্বপূর্ণ।


2

সম্পর্কিত একটি বাক্য হ'ল (আমি প্যারাফ্রেজ),

কোডটির জন্য " কোনও সুস্পষ্ট বাগ নেই " যথেষ্ট নয় : পরিবর্তে এর " অবশ্যই কোনও বাগ নেই " থাকা উচিত ।

তুলনামূলকভাবে "সহজ যুক্তিযুক্ত" এর একটি উদাহরণ RAII হতে পারে ।

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


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

আমি তুলনামূলক সহজ (সি ++ সি এর সাথে তুলনা করে) বোঝায়: উদাহরণস্বরূপ ভাষা-সমর্থিত নির্মাণকারীর অস্তিত্বের অর্থ প্রোগ্রামাররা এমন কোনও বস্তু তৈরি করতে / থাকতে / ব্যবহার করতে পারে না যা তারা আরম্ভ করতে ভুলে যায়, ইত্যাদি
ক্রিসডাব্লু

এই সিওএম-ভিত্তিক উদাহরণটি সমস্যাযুক্ত কারণ এটি শৈলীর সাথে মিশ্রিত করে, অর্থাৎ সি ++ - স্টাইলের স্মার্ট পয়েন্টার ( CComPtr<>) এর সাথে সি-স্টাইল ফাংশন ( CoUninitialize())। আমি এটি একটি উদ্ভট উদাহরণ খুঁজে পেয়েছি, যতদূর আমি মনে করি আপনি মডিউল স্কোপ এবং পুরো মডিউল জীবদ্দশায় CoInitialize / CoUninitialize প্রার্থনা করেন, উদাহরণস্বরূপ mainবা এর মধ্যে DllMainএবং উদাহরণস্বরূপ কিছু ছোট স্বল্প-স্থানীয় লোকাল ফাংশনের সুযোগে নয় not ।
ক্রিসডাব্লু

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

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

2

প্রোগ্রামিং এর ক্রুक्स কেস বিশ্লেষণ। অ্যালান পেরিলিস এপিগ্রাম # 32 এ মন্তব্য করেছিলেন: প্রোগ্রামাররা তাদের দক্ষতা এবং তাদের যুক্তি দ্বারা পরিমাপ করতে হবে না তবে তাদের কেস বিশ্লেষণের সম্পূর্ণতা দ্বারা।

কেস বিশ্লেষণ সহজ কিনা তা নিয়ে কোনও পরিস্থিতি সহজেই যুক্তিযুক্ত। এটির অর্থ হ'ল এখানে বিবেচনা করার মতো কয়েকটি মামলা রয়েছে, বা এটি ব্যর্থ হওয়ায় কয়েকটি বিশেষ কেস রয়েছে — কিছু বড় বড় ক্ষেত্রে থাকতে পারে তবে কিছু নিয়মকানুনের কারণে যা ভেঙে যায় বা যুক্তির মতো কৌশল যেমন ইন্ডাকশন হিসাবে আত্মসাৎ হয়।

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

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

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


0

অবশ্যই। সম্মতি নিন:

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

বিকল্প মডেল, উদাহরণস্বরূপ লক-মুক্ত প্রোগ্রামিং বা অভিনেতা: সম্ভবত আরও মার্জিত এবং শক্তিশালী, তবে বুঝতে অসুবিধা, কারণ আপনি "আপাতত এই জায়গাতে এই মানটি লিখুন" এর মতো মৌলিক ধারণাগুলির উপর নির্ভর করতে পারবেন না।

সম্পর্কে যুক্তি সহজ হচ্ছে এক একটি পদ্ধতি দৃষ্টিভঙ্গি। তবে কোন পদ্ধতিটি ব্যবহার করবেন তা চয়ন করতে সম্মিলিতভাবে সমস্ত দিক বিবেচনা করা প্রয়োজন ।


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

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

0

আসুন আমরা কাজটিকে আনুষ্ঠানিক যুক্তিতে সীমাবদ্ধ করি। কারণ হাস্যরসাত্মক বা উদ্ভাবনী বা কাব্যিক যুক্তির বিভিন্ন আইন রয়েছে।

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

কাঠামো "সম্পর্কে সহজ যুক্তি" এর জন্য নিম্নলিখিতগুলির জন্য ভাল নম্বর পাওয়া উচিত:

  • অভ্যন্তরীণ পদগুলির যুক্তিসঙ্গত, সহজেই পৃথক এবং সংজ্ঞায়িত নাম রয়েছে। যদি উপাদানগুলির কিছু স্তরবিন্যাস থাকে তবে পিতা-মাতার এবং সন্তানের নামের মধ্যে পার্থক্য ভাইবোনদের নামের পার্থক্যের থেকে পৃথক হওয়া উচিত।
  • ধরণের কাঠামোগত উপাদানের সংখ্যা কম
  • ব্যবহৃত ধরণের কাঠামোগত উপাদানগুলি এমন সহজ জিনিস যা আমরা অভ্যস্ত।
  • খুব সহজেই বোধগম্য উপাদানগুলি (পুনরাবৃত্তি, মেটা পদক্ষেপ, 4+ মাত্রিক জ্যামিতি ...) বিচ্ছিন্ন - একে অপরের সাথে সরাসরি মিলিত হয় না। (উদাহরণস্বরূপ, যদি আপনি 1,2,3,4..n.. মাত্রিক ঘনক্ষেত্রের জন্য কিছু পুনরাবৃত্ত নিয়মটি ভাবার চেষ্টা করেন তবে এটি খুব জটিল হবে But এন এর উপর নির্ভর করে আপনার প্রতিটি এন-কিউবের আলাদা আলাদা সূত্র থাকবে এবং পৃথক পৃথকভাবে এই সূত্রের জন্য একটি পুনরাবৃত্তি বিধি থাকবে And
  • কাঠামোগত উপাদানের প্রকারগুলি স্পষ্টতই আলাদা (উদাহরণস্বরূপ, 0 থেকে শুরু করে 1 থেকে মিশ্র অ্যারে ব্যবহার না করা)

পরীক্ষাটি কি সাবজেক্টিভ? হ্যাঁ, স্বাভাবিকভাবেই তা হয়। তবে এক্সপ্রেশনটি নিজেও সাবজেক্টিভ। এক ব্যক্তির পক্ষে যা সহজ, তা অন্য একজনের পক্ষে সহজ নয়। সুতরাং, বিভিন্ন ডোমেনের জন্য পরীক্ষাগুলি পৃথক হওয়া উচিত।


0

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

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

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


-2

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

"পক্ষে সহজ যুক্তি" আসলে একটি খুব স্ব বর্ণনামূলক বাক্যাংশ। যদি কেউ কোডটির দিকে তাকিয়ে থাকে এবং কীভাবে এটি যুক্তি করতে চায় তবে এটি সহজ =)

ঠিক আছে, এটা ভেঙে। আপনি যদি কোডটির দিকে তাকিয়ে থাকেন তবে আপনি সাধারণত এটি কিছু করতে চান। আপনি এটি নিশ্চিত করতে চান যে এটি যা করা উচিত বলে মনে করে তা তা করে। সুতরাং কোডটি কী করা উচিত সে সম্পর্কে আপনি তত্ত্বগুলি বিকাশ করেন এবং তারপরে আপনি কোডটি কেন কার্যত কাজ করে তা তর্ক করার চেষ্টা করার বিষয়ে যুক্তি প্রদর্শন করেন। আপনি একটি মানুষের মতো কোড সম্পর্কে চিন্তা করার চেষ্টা করুন (কম্পিউটারের মতো নয়) এবং কোড কী করতে পারে সে সম্পর্কে যুক্তি যুক্তিযুক্ত করার চেষ্টা করুন।

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

#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)

সহজ যুক্তি হিসাবে, আবার, শব্দটি অত্যন্ত সাংস্কৃতিক। আপনাকে বিবেচনা করতে হবে:

  • যুক্তির কী দক্ষতা আছে? কত অভিজ্ঞতা?
  • কোডটি সম্পর্কে যুক্তিবিদকে কী ধরণের প্রশ্ন থাকতে পারে?
  • কতটা যুক্তিযুক্ত হওয়া দরকার?

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

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

পাঠক কী ধরণের প্রশ্নের উত্তর দিতে আগ্রহী হতে পারে তা বোঝাও গুরুত্বপূর্ণ। আপনার পাঠকরা কি বেশিরভাগ ক্ষেত্রে কোডটির উপরের বোঝাপড়া নিয়ে উদ্বিগ্ন, বা তারা তলদেশে গভীর ত্রুটিগুলি খুঁজছেন?

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


12
পার্ল কোডটি পড়া শক্ত ; না যুক্তি সম্পর্কে। এটি বুঝতে যদি আমার কিছু অংশ থাকে তবে আমি কোডটি বাতিল করে দেব। যে কোডটি সম্পর্কে তর্ক করতে আসলেই শক্ত তা হ'ল এটি যখন এখনও সমস্ত কিছুর জন্য পরিষ্কার পরিচয়কারী এবং কোনও কোড গল্ফিং ট্রিকস দিয়ে চমত্কারভাবে ফর্ম্যাট করা হয় তখন সেই বিষয়ে তর্ক করা শক্ত।
কাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.