iএবং jখুব জনপ্রিয় পরিবর্তনশীল নাম (যেমন দেখুন, এই প্রশ্নটি এবং এটি একটি )।
উদাহরণস্বরূপ, লুপগুলিতে:
for i=1:10,
% do something...
end
সূচক হিসাবে ম্যাট্রিক্সে:
mat( i, j ) = 4;
এগুলিকে মতলবতে চলক নাম হিসাবে ব্যবহার করা উচিত নয় কেন ?
iএবং jখুব জনপ্রিয় পরিবর্তনশীল নাম (যেমন দেখুন, এই প্রশ্নটি এবং এটি একটি )।
উদাহরণস্বরূপ, লুপগুলিতে:
for i=1:10,
% do something...
end
সূচক হিসাবে ম্যাট্রিক্সে:
mat( i, j ) = 4;
এগুলিকে মতলবতে চলক নাম হিসাবে ব্যবহার করা উচিত নয় কেন ?
উত্তর:
কারণ iএবং jউভয় ফাংশনই কাল্পনিক ইউনিটকে বোঝায় :
সুতরাং একটি পরিবর্তনীয় বলা iবা jতাদের ওভাররাইড করবে, সম্ভাব্য নীরবে বিরতি কোড যা জটিল গণিতগুলি করে।
সম্ভাব্য সমাধানগুলির পরিবর্তে লুপ ভেরিয়েবলগুলি ব্যবহার করা iiএবং jjহিসাবে অন্তর্ভুক্ত করা বা 1iযখনই iকাল্পনিক ইউনিটের প্রতিনিধিত্ব করার প্রয়োজন হয় তখন ব্যবহার করা অন্তর্ভুক্ত ।
iএবং jপরিবর্তনশীল নামগুলি সমাধান করার জন্য মৃত্যুদণ্ড কার্যকর করার সময়টি এখনও ত্যাগ করা হয় ।
for1 বিলিয়ন বার লুপকে কল করা সহজ পরীক্ষাগুলি সময় নির্ধারণের ক্ষেত্রে কোনও পরিসংখ্যানগত পার্থক্য দেখায় না)। আমরা সকলেই জানি যে হ্যান্ডেল করার জন্য এখানে বিশেষ কোড রয়েছে iএবং j(এবং k?) ব্যতীত অন্যান্য ভেরিয়েবলগুলি ব্যবহার করা আসলে কিছুটা ধীর। এবং বিদ্যমান পার্থক্যগুলি হ'ল বাস্তব জীবনে অস্তিত্বহীন থেকে শুরু করে। কেবল ব্যবহার না করার কোনও কারণ নেই iএবং jনিয়মিত ভেরিয়েবল হিসাবে - এগুলি কেবল অন্য মতলব ফাংশনের মতো সঠিকভাবে ব্যবহার করতে হবে।
for1 বিলিয়ন বার লুপকে কল করার এবং সমস্ত পদ্ধতিতে সময় পরিকল্পনার চেষ্টা করার সময় আমি কোনও ত্রুটি দেখতে পাই নি । আমি নতুন এসও ব্যবহারকারীদের দেখছি যে পুরোপুরি বৈধ কোডটি ভুল কারণ তারা ব্যবহার করছে iএবং jলুপগুলি পুনরাবৃত্তি করতে পারে। সত্যি এটা ঠিক বোকামি এবং মানুষ এই প্রশ্নের আরো গুরুত্বপূর্ণ পয়েন্ট অনুপস্থিত: যে iএবং jযদি এক পাঠযোগ্য আধুনিক মতলব কোড লিখতে চায় এমনকি কাল্পনিক ইউনিট জন্য ব্যবহার করা উচিত নয়।
ভেরিয়েবল বা কাল্পনিক ইউনিট সম্পর্কে বিভ্রান্তি রোধ করার জন্য এড়ানো iএবং jভেরিয়েবলগুলি এড়ানো ভাল অনুশীলন ।
ব্যক্তিগতভাবে, তবে আমি সংক্ষিপ্ত লুপগুলির সূচক হিসাবে প্রায়শই প্রায়শই ব্যবহার করি iএবং jভেরিয়েবল হিসাবে। আমার নিজের কোডে সমস্যা এড়াতে, আমি সম্পর্কিত আরও একটি ভাল অভ্যাস অনুসরণ করি iএবং j: কল্পিত সংখ্যা বোঝাতে এগুলি ব্যবহার করি না । আসলে, মতলবের নিজস্ব ডকুমেন্টেশনগুলি বলে :
গতি এবং উন্নত দৃust়তার জন্য, আপনি জটিল
iএবংjদ্বারা প্রতিস্থাপন করতে পারেন1i।
সুতরাং সম্ভাব্য দ্বন্দ্বের কারণে দুটি খুব সাধারণত ব্যবহৃত ভেরিয়েবল নাম এড়িয়ে চলার পরিবর্তে, আমি কাল্পনিক সংখ্যাগুলি সম্পর্কে স্পষ্ট। এটি আমার কোডটিকে আরও স্পষ্ট করে তোলে। যে কোনও সময় আমি দেখি 1i, আমি জানি যে এটি প্রতিনিধিত্ব করে sqrt(-1)কারণ এটি সম্ভবত পরিবর্তনশীল হতে পারে না।
iএবং jসর্বোত্তম তা স্বীকার করার জন্য আমার উত্তরটি টুইট করেছিলাম , তবে কীভাবে আমার ব্যক্তিগত কোডিং শৈলী সেই নিয়মকে অনুসরণ করে না তা ব্যাখ্যা করেছি।
1iএবং iজটিল গণিতের জন্য নয় । আসুন কল্পিত সংখ্যা হিসাবে ভাবেন এবং কাল্পনিক সংখ্যা হিসাবে একটি খারাপ অনুশীলন হিসাবে 1iনেওয়া যাক i। প্রায় অন্য উপায় না. ব্যবহার i, ii, iiiমতলব সাধারণ অভ্যাস এবং কোন সমস্যা যখন মানুষ বিদ্ধ হয় 1iএবং 1jজটিল সংখ্যার জন্য। এছাড়াও মতলব এটি সম্মান করে এবং এটি পূর্ববর্তী উত্তরে বর্ণিত মতামত (যতদূর আমি পরীক্ষা করেছি) কর্মক্ষমতা হ্রাস করে না।
ম্যাটল্যাবের পুরানো সংস্করণগুলিতে, ভেরিয়েবল নামগুলি ব্যবহার করা iএবং এটি এড়ানোর উপযুক্ত কারণ ছিল j- মাতলাব জেআইটির প্রাথমিক সংস্করণগুলি আপনি এগুলি ভেরিয়েবল হিসাবে ব্যবহার করছেন বা কাল্পনিক ইউনিট হিসাবে বলার মতো যথেষ্ট চালাক ছিল না এবং তাই হবে অনেকগুলি সম্ভব অপ্টিমাইজেশন বন্ধ করুন।
সুতরাং আপনার কোডটি ভেরিয়েবলের উপস্থিতি iএবং উপস্থিতি দ্বারা ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে তার দ্বারা jপরিবর্তনশীল উপস্থিত হয়ে উঠবে you এ কারণেই, আপনি যদি অনেক ম্যাথ ওয়ার্কস কোড পড়ে থাকেন তবে আপনি লুপ সূচক হিসাবে মোটামুটিভাবে দেখতে পাবেন iiএবং jjব্যবহার করবেন। কিছুক্ষণের জন্য, ম্যাথ ওয়ার্কস এমনকি অনানুষ্ঠানিকভাবে লোকদের নিজেরাই এটি করার পরামর্শ দিয়েছিল (যদিও তারা সর্বদা সরকারীভাবে জেআইটি যা কিছু করে না তার পরিবর্তে লোককে কমনীয়তা / রক্ষণাবেক্ষণের জন্য প্রোগ্রাম করার পরামর্শ দেয়, কারণ এটি প্রতিটি সংস্করণ একটি চলন্ত লক্ষ্য)।
তবে এটি বরং অনেক দিন আগে, এবং আজকাল এটি "জম্বি" ইস্যুটির একটি বিষয় যা অনেক লোক এখনও মনে করে তার চেয়ে অনেক কম গুরুত্বপূর্ণ, তবে মারা যেতে অস্বীকার করে।
যে কোনও সাম্প্রতিক সংস্করণে, ব্যবহারযোগ্য পরিবর্তনশীল নাম iএবং না jহিসাবে এটি ব্যবহার করার ক্ষেত্রে এটি ব্যক্তিগত পছন্দ । জটিল সংখ্যার সাথে যদি আপনি প্রচুর কাজ করেন তবে আপনি যে কোনও জটিল বিভ্রান্তির ঝুঁকি এড়াতে iএবং jপরিবর্তনশীল হিসাবে এড়াতে চাইতে পারেন (যদিও আপনি / পরিবর্তে কেবলমাত্র ব্যবহার করতে 1iবা 1jএমনকি আরও কম বিভ্রান্তির জন্য, এবং কিছুটা আরও ভাল পারফরম্যান্সের জন্য চাইবেন) )।
অন্যদিকে, আমার সাধারণ কাজে আমি কখনই জটিল সংখ্যার সাথে লেনদেন করি না এবং আমি যদি আমার ব্যবহারে নির্দ্বিধায় iএবং jলুপ সূচক হিসাবে মনে করি তবে আমার কোডটি আরও পাঠযোগ্য find
আমি এখানে প্রচুর উত্তর দেখতে পাচ্ছি যা বলে যে এটি প্রস্তাবিত নয় ... কে এই সুপারিশ করছে তা না বলে। এখানে বর্তমান রিলিজ ডকুমেন্টেশন থেকে ম্যাথ ওয়ার্কসের প্রকৃত প্রস্তাবনার পরিমাণ রয়েছে i:
যেহেতু আমি একটি ফাংশন তাই এটি ওভাররাইড করে একটি চলক হিসাবে ব্যবহার করা যেতে পারে। তবে, আপনি জটিল গাণিতিকগুলিতে ব্যবহার করার ইচ্ছুক হলে ভেরিয়েবল নামের জন্য i এবং j ব্যবহার না করা ভাল। [...] গতি এবং উন্নত দৃust়তার জন্য, আপনি জটিল আই এবং জে 1i দ্বারা প্রতিস্থাপন করতে পারেন।
অন্যান্য উত্তরে বর্ণিত হিসাবে, iদুটি কারণে সাধারণ কোড ব্যবহারের পরামর্শ দেওয়া হয় না:
প্রস্তাবিত হিসাবে: 1iএবং iiপ্রস্তাবিত হয়। তবে এটি উভয়ই সূক্ষ্ম বিচ্যুতি হলেও, এই দুটি iবিকল্পকে একসাথে ব্যবহার করা খুব সুন্দর নয়।
এখানে (ব্যক্তিগতভাবে) আমি কেন এটি পছন্দ করি না তার একটি উদাহরণ এখানে দেওয়া হয়েছে:
val2 = val + i % 1
val2 = val + ii % 2
val2 = val + 1i % 3
একজন সহজেই দু'জন বা তিনটির জন্য ভুল পড়া হবে না, তবে দুটি এবং তিনটি একে অপরের সাথে সাদৃশ্যপূর্ণ।
আমার ব্যক্তিগত সুপারিশটি হ'ল: আপনি যদি কখনও কখনও জটিল কোডের সাথে কাজ করেন তবে সর্বদা 1iএকটি ভিন্ন লুপ ভেরিয়েবলের সাথে মিলিত ব্যবহার করুন ।
একক চিঠি সূচকের উদাহরণ যে আপনি যদি অনেক লুপ ভেরিয়েবল ও অক্ষর চলা ব্যবহার করবেন না জন্য: t, u, kএবংp
আর সূচকের উদাহরণ: i_loop, step, walk, এবংt_now
অবশ্যই এটি ব্যক্তিগত স্বাদেরও বিষয়, তবে দীর্ঘায়িত না হয়ে সুস্পষ্ট অর্থের জন্য সূচকগুলি খুঁজে পাওয়া শক্ত হবে না।
1iএকটি সংখ্যা হিসাবে আলাদা বর্ণযুক্ত হবে :)
doc iএবং doc j: "গতি এবং উন্নত দৃust়তার জন্য, আপনি জটিল আই এবং জে 1i দ্বারা প্রতিস্থাপন করতে পারেন।" আইএমও, বর্তমান মতলবটিতে ব্যবহার না করা iএবং jলুপ ইত্যাদির কোনও কারণ নেই , বা 1iকাল্পনিক ইউনিট বোঝাতে ব্যতীত অন্য কিছু ব্যবহার করা ( 1jখুব কার্যকর)) সর্বদা-সামান্য-বেমানান সিম্বলিক ইঞ্জিনে স্ট্রিংগুলি পাস করার ক্ষেত্রে একমাত্র ব্যতিক্রম। অদ্ভুত যে help 1iএবং doc 1iযদিও কাজ না।
এটি উল্লেখ করা হয়েছিল যে 1iএটি একটি গ্রহণযোগ্য এবং দ্ব্যর্থহীন উপায় sqrt(-1)এবং এটি যেমন ব্যবহার করা এড়াতে হবে না i। তারপরে আবার, ডেনিস যেমন নির্দেশ করেছেন ( https://stackoverflow.com/a/14893729/1967396 ), 1iএবং এর মধ্যে পার্থক্যটি দেখা কঠিন হতে পারে ii। আমার পরামর্শ: 1jযেখানে সম্ভব সেখানে কাল্পনিক ধ্রুবক হিসাবে ব্যবহার করুন । তারা ব্যবহার করেন - এটা একই কৌতুক যে তড়িৎ প্রকৌশলীরা চাকরী এর jজন্য sqrt(-1)কারণ iইতিমধ্যে জন্য নেওয়া হয় বর্তমান ।
ব্যক্তিগতভাবে আমি কখনও ব্যবহার করি না iএবং j; আমি শর্টহ্যান্ড ইনডেক্সিং ভেরিয়েবলগুলি হিসাবে ব্যবহার করি iiএবং jj(এবং কেকে, এলএল, মিমি, ...) এবং 1jযখন আমাকে জটিল সংখ্যাগুলি ব্যবহার করার প্রয়োজন হয়।
1iএবং এর মধ্যে পার্থক্যটি দেখা শক্ত হতে পারে ii" 1এবং lএবং এর মধ্যে Oএবং এর মধ্যে এবং এর মধ্যে আরও পার্থক্য 0। সে কারণেই আমি একটি নতুন ম্যাটালব ইনস্টলেশনতে প্রথম পদক্ষেপটি ডিফল্ট ফন্টের আকার পরিবর্তন করছে।
কাল্পনিক ইউনিটের সাথে বিভ্রান্তি এখানে ভালভাবে কভার করা হয়েছে তবে আরও কিছু প্রসাইক কারণ রয়েছে যেগুলি এবং এইগুলি এবং অন্যান্য একক-বর্ণের পরিবর্তনশীল নামগুলি মাঝে মাঝে নিরুৎসাহিত করা হয়।
ম্যাটল্যাব বিশেষভাবে: আপনি যদি আপনার ম্যাটল্যাব কোড থেকে সি ++ উত্স তৈরি করতে কোডার ব্যবহার করছেন (তবে এটি ভয়ঙ্কর নয়) তবে সম্ভাব্য টাইপিং সংঘর্ষের কারণে আপনাকে স্পষ্টভাবে সতর্ক করে দেওয়া হয়েছে যে ভেরিয়েবলগুলি পুনরায় ব্যবহার না করার জন্য।
সাধারণত, এবং আপনার আইডিই এর উপর নির্ভর করে একটি একক-বর্ণের পরিবর্তনশীল নাম হাইলাইটারগুলির সাহায্যে এবং অনুসন্ধান / প্রতিস্থাপনের দ্বারা ধ্বংস হতে পারে। ম্যাটল্যাব এতে ভোগেনা এবং আমি বিশ্বাস করি ভিজ্যুয়াল স্টুডিওতে কিছু সময়ের জন্য সমস্যা হয়নি তবে সি / সি ++ কোডিং মান যেমন মিশ্র ইত্যাদি তাদের পুনরায় পরামর্শ দেওয়ার প্রবণতা রয়েছে।
আমার অংশের জন্য, আমি গাণিতিক উত্স সরাসরি বাস্তবায়নের সুস্পষ্ট সুবিধা সত্ত্বেও, সমস্ত একক-বর্ণের ভেরিয়েবলগুলি এড়িয়ে চলি। এটি করার জন্য কয়েকশবার চেষ্টা করার পরে কিছুটা অতিরিক্ত প্রচেষ্টা দরকার তবে এর পরে আপনি খেয়াল করা বন্ধ করে দেন এবং যখন আপনি বা অন্য কোনও দরিদ্র আত্মা আপনার কোডটি পড়তে আসেন তখন সুবিধাগুলি হল সামরিক বাহিনী।
যে কোনও অ-তুচ্ছ কোডটিতে একাধিক forলুপ থাকে এবং সর্বোত্তম অনুশীলনে আপনি এর উদ্দেশ্য এবং সুযোগের বর্ণনামূলক নাম ব্যবহার করার পরামর্শ দেন। জন্য বার অনাদিকাল (এবং যদি না তার 5-10 লাইন স্ক্রিপ্ট যে আমি সেভ করতে যাচ্ছি না), আমি সবসময় মত পরিবর্তনশীল নামের ব্যবহার করা হয়েছে idxTask, idxAnotherTaskএবং idxSubTaskইত্যাদি
অথবা অন্ততপক্ষে অ্যারের এটা যেমন সূচিবদ্ধ করছে তা প্রথম অক্ষর দ্বিগুন এ ssসূচক subjectList, ttসূচক taskList, কিন্তু না iiবা jjযা আমার অনায়াসে যা অ্যারে তারা loops জন্য আমার একাধিক বাইরে ইন্ডেক্স করা হয় সনাক্ত করতে সহায়তা করে না।
ডিফল্টরূপে iএবং jকল্পিত ইউনিটের পক্ষে দাঁড়ান। সুতরাং ম্যাটল্যাবের দৃষ্টিকোণ থেকে iভেরিয়েবল হিসাবে ব্যবহার করা কোনওভাবে 1ভেরিয়েবল হিসাবে ব্যবহারের মতো।
iএবং jআসলে কাল্পনিক একক মান ফিরে ফাংশন আছে। একটি সুযোগে একটি কার্য হিসাবে একই নামের সাথে একটি ভেরিয়েবল ব্যবহার করা সম্ভব। এটি তবে ফাংশনটিকে ছায়া দিবে।
আপনি যদি খুব বিভ্রান্ত ব্যবহারকারী না হন তবে আমি ভাবেন যে আমি এবং জে ভেরিয়েবলের নাম ব্যবহার করার খুব কম ঝুঁকি রয়েছে এবং আমি এগুলি নিয়মিত ব্যবহার করি। এই অনুশীলনটি এড়ানো উচিত বলে কোনও অফিসিয়াল ইঙ্গিত আমি দেখিনি।
যদিও এটি সত্য যে কাল্পনিক ইউনিটকে ছায়া দেওয়া কিছু প্রসঙ্গে কিছু বিভ্রান্তির কারণ হতে পারে অন্যান্য পোস্টগুলিতে উল্লিখিত হয়েছে, সামগ্রিকভাবে আমি এটিকে বড় বিষয় হিসাবে দেখি না। ম্যাটল্যাবে আরও অনেক বিভ্রান্তিকর জিনিস আপনি করতে পারেন, উদাহরণস্বরূপ সংজ্ঞাটি গ্রহণ করুনfalse=true
আমার মতে আপনার কোডটি বিশেষত কল্পিত সংখ্যার সাথে সম্পর্কিত হলে কেবলমাত্র এগুলি এড়ানো উচিত।
iএকটি ফাংশন তাই এটি ওভাররাইড করা যায় এবং ভেরিয়েবল হিসাবে ব্যবহার করা যেতে পারে However তবে জটিল গাণিতিক ক্ষেত্রে যদি আপনি সেগুলি ব্যবহার করতে চান তবে পরিবর্তনশীল নামগুলি ব্যবহার করা iএবং এড়ানো ভাল j" " এটি, অলিভারের উত্তর সম্পর্কে আইটেন টি-র মন্তব্যের সাথে মিলিতভাবে (আমার ধারণা তিনি সময় নিয়েছিলেন) এটি যথেষ্ট প্রমাণ বলে মনে হয়।
i,j,kজেনেরিক লুপ পরিবর্তনশীল নামের হিসাবে।