সঠিক ডিজাইনের মাধ্যমে কোন পরিবর্তনগুলি খুব সহজ করা যায়?


11

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

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

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

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

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

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

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

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


আপনার ভাষার পরিবর্তন পার্সার ব্যতীত অন্য কিছুকে কীভাবে স্পর্শ করে তা আমি দেখতে পাই না। আপনি এই পরিষ্কার করতে পারেন?
স্কার্ফ্রিজে

ছোট্ট টাল-জাতীয় ভাষায় এটি সত্য যে আপনাকে কেবলমাত্র পার্সারটি পরিবর্তন করতে হবে, কারণ এটি foo metarg1: bar metarg2: bazহিসাবে বিবেচনা করার ক্ষেত্রে এটি একটি সহজ বিষয় foo.metarg1_metarg2_(bar, baz)। যাইহোক, আমার ভাষা, যা রানটাইম কিন্তু প্রভাবিত একটি বৃহত্তর পরিবর্তন, ডিকশনারি বেজড প্যারামিটার যথা তালিকা ভিত্তিক প্যারামিটার, করছে না আমার ভাষা নির্দিষ্ট বৈশিষ্ট্য আমি এই মুহূর্তে মধ্যে যেতে হবে না কারণে, পার্সার আসলে। যেহেতু আনর্ডারড-কীওয়ার্ড এবং অবস্থানগত তর্কগুলির মধ্যে কোনও স্পষ্ট ম্যাপিং নেই, তাই রানটাইমই মূল বিষয় issue
অস্তিত্বহীন -

উত্তর:


13

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

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

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

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

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

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


নতুন কেস এবং পুরানো কেস সমর্থন করার জন্য +1 যাতে আপনি যেতে যেতে পর্যায়ক্রমে আসতে পারেন।
এরিক রেপেন

9

আমি আপনাকে বিগ বলের কাদা রচনাটি পড়ার পরামর্শ দিচ্ছি ।

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

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

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

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


1
+1: উপন্যাসের সম্মুখ নকশা খুব কমই সফল। সফল নকশাগুলি হয় প্রমাণিত ডিজাইনের পুনরাবৃত্তি, বা পুনরাবৃত্তভাবে পরিমার্জন করা হয়েছিল।
কেভিন ক্লিইন

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

4

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

কোডের অন্যান্য অংশ যদি ইন্টারফেসটি পরিবর্তন না করে পরিবর্তিত করা যায় যা কোডের অন্যান্য টুকরা নির্ভর করে, তবে পরিবর্তনটি আরও সহজ হবে (এবং আপনি ওওপি ব্যবহার করেন বা না করেন তা বিবেচ্য নয়)।

কোডের অন্যান্য অংশ যদি ইন্টারফেস পরিবর্তন না করে পরিবর্তিত করা যায় না যা কোডের অন্যান্য অংশের উপর নির্ভর করে, তবে পরিবর্তনটি আরও কঠোর হবে (এবং আপনি ওওপি ব্যবহার করেন বা না করেন তা বিবেচ্য নয়)।

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


ওওপি-র আর একটি সুবিধা হ'ল এটির উপর চালিত যুক্তিটির সাথে ডেটা আবদ্ধ করা ছোট পাবলিক ইন্টারফেসগুলিতে নিয়ে যায় (যদি ভালভাবে করা হয়)।
মাইকেল বর্গওয়ার্ট

2

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

যেখানে একটি ভাল নকশা আছে আপনাকে সাহায্য সাহায্য আপনি বুঝতে সব অংশে একসঙ্গে মাপসই করা হবে এবং কি প্রস্তাবিত পরিবর্তনের ফলে প্রভাবিত হবে।
অতিরিক্তভাবে, একটি ভাল নকশা বেশিরভাগ প্রস্তাবিত পরিবর্তনের দ্বারা প্রভাবিত অংশগুলিকে সীমাবদ্ধ করতে পারে।

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


1

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

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

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

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


3
শুরু করার অবস্থানটিও নেতিবাচক হতে পারে। উত্তরাধিকারের ক্ষমতাকে অবমূল্যায়ন করবেন না :)
ম্যাগলব

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

1

ঝাড়ু পরিবর্তনের ব্যয় প্রায়শই কোড বেসের আকারের সাথে সমানুপাতিক হয়। অতএব, কোড বেসের আকার হ্রাস সর্বদা যে কোনও উপযুক্ত নকশার লক্ষ্য হতে হবে।

আপনার উদাহরণে, সঠিক নকশা ইতিমধ্যে আপনার কাজটিকে আরও সহজ করে তুলেছে: কোড বেসের 20000 বা 200000 লাইনের পরিবর্তে কোড ভিত্তির 2000 লাইন জুড়ে পরিবর্তন আনতে হবে।

যথাযথ নকশাটি স্যুইপিং পরিবর্তনগুলি হ্রাস করে, তবে সেগুলি সরিয়ে দেয় না।

ভাষা বিশ্লেষণ সরঞ্জামগুলি থেকে যথাযথ সমর্থন থাকলে খুব সক্রিয় পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে কার্যকর able একটি কম্বল রিফ্যাক্টরিং পরিবর্তন পুরো কোড বেসে সন্ধান এবং প্রতিস্থাপন শৈলীতে প্রয়োগ করা যেতে পারে (ভাষার নিয়মকে যথাযথভাবে সম্মান করার সময়)। প্রোগ্রামারকে প্রতিটি অনুসন্ধানের জন্য কেবলমাত্র হ্যাঁ / রায় দেওয়া উচিত নয়।


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