খাঁটি ক্রিয়ামূলক বনাম বলুন, জিজ্ঞাসা করবেন না?


14

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

( সূত্র: এই সাইটে অন্য প্রশ্নের অধীনে @ ডেভিড আরনোর মন্তব্য )

মন্তব্যে 133 টি আপভোটের দর্শনীয় পরিমাণ অর্জন হয়েছে, এ কারণেই আমি এর যোগ্যতার দিকে কিছুটা মনোযোগ দিতে চাই।

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

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

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

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

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

ঠিক আছে - আমি সত্যিই চাইলে কোনও পদ্ধতিতে যুদ্ধের স্থিতি পরিবর্তনের পরিবর্তে যুদ্ধের স্থিতি ফিরিয়ে আনতে পারি। কিন্ত! তারপরে কি যুদ্ধের রাজ্যের সমস্ত কিছু অনাবশ্যকভাবে অনুলিপি করে কেবল নতুন রাষ্ট্রের পরিবর্তে পরিবর্তনের পরিবর্তে ফিরিয়ে আনতে হবে?

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

আমার পক্ষে কেবলমাত্র স্থানে রাষ্ট্র পরিবর্তন করতে এবং আপডেটগুলি ফিরিয়ে দেওয়া খুব সহজ বলে মনে হচ্ছে ...

তবে একজন অভিজ্ঞ প্রকৌশলী কীভাবে এটিকে মোকাবেলা করবেন?


9
যে কোনও দৃষ্টান্ত অনুসরণ করা ব্যর্থতার একটি নিশ্চিত উপায়। নীতি কখনই বুদ্ধি ট্রাম্প করা উচিত নয়। কোনও সমস্যার সমাধান সমস্যার উপর নির্ভর করা উচিত, সমস্যা সমাধান সম্পর্কে আপনার ধর্মীয় বিশ্বাস নয়।
জন ডৌমা

1
আমি আগে বলেছি এমন কিছু সম্পর্কে এখানে কখনও জিজ্ঞাসা করা হয়নি। আমি সম্মানিত। :)
ডেভিড আরনো

উত্তর:


14

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

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

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


"বলুন, জিজ্ঞাসা করবেন না" সঠিকভাবে ব্যাখ্যা করার জন্য আপনাকে ধন্যবাদ।
ব্যবহারকারী949300

13

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

প্রথম: চাচা বব এর পাঠ

চাচা বব এই বিষয়টি তৈরি করছে যে আপনার ফাংশন / পদ্ধতিতে আপনার যত বেশি যুক্তি রয়েছে তত বেশি বিকাশকারীরা এটি ব্যবহার করতে হবে তা বুঝতে হবে। সেই জ্ঞানীয় লোডটি নিখরচায় আসে না এবং আপনি যদি যুক্তির ক্রম অনুসারে সামঞ্জস্য না করেন ইত্যাদি জ্ঞানীয় বোঝা কেবল বাড়িয়ে তোলে।

এটি মানব হওয়ার সত্যতা। আমি মনে করি আঙ্কেল বব এর ক্লিন কোড বইয়ে কী ভুল বিবৃতি হল "একটি ফাংশন জন্য আর্গুমেন্ট আদর্শ শূন্য সংখ্যা হল" । মিনিমালিজম দুর্দান্ত না হওয়া পর্যন্ত দুর্দান্ত। আপনি যেমন ক্যালকুলাসে কখনই নিজের সীমাতে পৌঁছান না, আপনি কখনই "আদর্শ" কোডে পৌঁছাতে পারবেন না - আপনারও উচিত নয়।

যেমন আলবার্ট আইনস্টাইন বলেছিলেন, "সবকিছু যত সহজ হতে পারে তত সহজ হওয়া উচিত, তবে সহজ নয়"।

দ্বিতীয়: ডেভিড আরনোর পাঠ

বর্ণিত ডেভিড আরনোর বিকাশের উপায় অবজেক্ট অরিয়েন্টেডের চেয়ে বেশি কার্যকরী শৈলীর বিকাশ । তবে, ফাংশনাল কোড স্কেলগুলি traditionalতিহ্যগত অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের চেয়ে ভাল। কেন? তালা দেওয়ার কারণে। যে কোনও সময় স্থিতি কোনও বস্তুর মধ্যে পরিবর্তনযোগ্য, আপনি বর্ণের পরিস্থিতি বা লক করার ঝুঁকির ঝুঁকি নিয়ে চলেছেন।

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

উন্নয়ন হ'ল ট্রেড অফের একটি সিরিজ

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

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

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

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


প্যারালাইলিজম আছে। সমান্তরালে বিভিন্ন যুদ্ধ প্রক্রিয়া করা যেতে পারে। তবে, হ্যাঁ: একটি একক যুদ্ধ, এটি প্রক্রিয়াধীন হওয়ার সময়, লক করা দরকার।
গাজকাম

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

8

ঠিক আছে - আমি সত্যিই চাইলে কোনও পদ্ধতিতে যুদ্ধের স্থিতি পরিবর্তনের পরিবর্তে যুদ্ধের স্থিতি ফিরিয়ে আনতে পারি।

হ্যাঁ, এটি ধারণা।

এরপরে কি যুদ্ধের স্থিতি পরিবর্তনের পরিবর্তে পুরোপুরি নতুন রাষ্ট্র ফিরিয়ে দেওয়ার জন্য সমস্ত কিছু অনুলিপি করতে হবে?

না Your আপনার "যুদ্ধের অবস্থা" কে এক পরিবর্তনযোগ্য ডেটা স্ট্রাকচার হিসাবে মডেল করা যেতে পারে, এতে বিল্ডিং ব্লক হিসাবে অন্যান্য অপরিবর্তনীয় ডেটা স্ট্রাকচার রয়েছে, সম্ভবত কিছু পরিবর্তনীয় ডেটা স্ট্রাকচারের স্তরবিন্যাসে বাসা বাঁধে।

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

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

আমার পক্ষে কেবলমাত্র স্থানে রাজ্যটি সংশোধন করা এবং আপডেটগুলি ফিরিয়ে দেওয়া এত সহজ seems

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


8

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

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

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

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

আসুন সহজ সূচনা ফিরে যান। আমাদের কাছে "লাম্পস অফ লজিক" (পদ্ধতি) রয়েছে এবং আমাদের কাছে বৈশ্বিক ডেটা রয়েছে। পদ্ধতিগুলি অ্যাক্সেস করার জন্য সরাসরি সেই ডেটা পড়ে ced আমাদের কাছে একটি "জিজ্ঞাসা" পরিস্থিতি রয়েছে।

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

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

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

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

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

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

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

এবং একটি চূড়ান্ত বিষয় হিসাবে, কেবল পুনরাবৃত্তি করার জন্য: খাঁটি ফাংশন এবং "বলুন, জিজ্ঞাসা করবেন না" মোটেই বিরোধী নয়।


5

যে কোনও কিছুর জন্য, কখনও বলেছিলেন, এখানে একটি প্রসঙ্গ উপস্থিত রয়েছে, যাতে আপনি সেই বিবৃতি দিতে পারেন, এটি এটিকে অযৌক্তিক করে তুলবে।

এখানে চিত্র বর্ণনা লিখুন

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

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

যাইহোক, প্রতিটি নামই আমাকে যা জানার দরকার তা সব বলে না। কিছু নাম ফাংশনটির আচরণ এবং সেই সাথে প্রকাশিত যুক্তিগুলি নিয়ন্ত্রণ করে এমন তথ্য বুঝতে গুরুত্বপূর্ণ প্রকাশ করে না। প্রোগ্রামিংয়ের কার্যকরী শৈলীর কারণে যুক্তিটি আরও সহজ করে তোলে That

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

সুতরাং দয়া করে দাবি করবেন না যে ফাংশনাল প্রোগ্রামিং এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং "মৌলিকভাবে বেমানান"। আমি আমার কার্যকরী প্রোগ্রামগুলিতে অবজেক্টগুলি ব্যবহার করতে পারি এবং আমি আমার ওও প্রোগ্রামগুলিতে খাঁটি ফাংশন ব্যবহার করতে পারি।

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

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

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

উভয়ই ভাল বৈশিষ্ট্য সরবরাহ করে। আপনি উভয় করতে পারেন। যদি আপনি এগুলিকে মিশ্রিত করার মতো সাহসী হন তবে তাদের স্পষ্ট করে লেবেল করুন।


0

বিভিন্ন দৃষ্টান্তের সমস্ত নিয়ম বোঝার জন্য আমি মাঝে মাঝে লড়াই করি। তারা এই পরিস্থিতিতে যেমন হয় তখন তারা একে অপরের সাথে মতবিরোধে লিপ্ত হয়।

ওওপি হ'ল একটি আবশ্যকীয় দৃষ্টান্ত যা বিপজ্জনক জিনিসগুলি ঘটে এমন বিশ্বে কাঁচি দিয়ে চলছে।

এফপি হ'ল একটি কার্যকরী দৃষ্টান্ত যা খাঁটি গণনায় সম্পূর্ণ সুরক্ষা খুঁজে পায় finds এখানে কিছুই হয় না।

যাইহোক, সমস্ত প্রোগ্রাম কার্যকর হতে আবশ্যক বিশ্বের প্রবেশ করা আবশ্যক। সুতরাং, কার্যকরী কোর, অপরিহার্য শেল

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

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

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

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