জাভাস্ক্রিপ্টে ++ কিছু পরিবর্তনশীল বনাম কিছু পরিবর্তনশীল ++


135

জাভাস্ক্রিপ্টে আপনি ++অপারেটরটি আগে ( প্রাক-বর্ধন ) বা ভেরিয়েবলের পরে ( পোস্ট-ইনক্রিমেন্ট ) ব্যবহার করতে পারেন । কোন, যদি কোনও হয় তবে একটি পরিবর্তনশীল বৃদ্ধির এই পদ্ধতির মধ্যে পার্থক্যগুলি কী?



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

পূর্ববর্তী মন্তব্য আসলে একটি অনুলিপি উত্তর (ক অ উত্তর, বরং) আমি 2010 সালে পোস্ট । আমি উত্তরটি মুছে ফেলেছি, তবে জন স্কিটি এর জবাব দিয়েছিল : "ইসিএমএ -২ 26২ এর দিকে তাকালে এটি যুক্তিসঙ্গতভাবে সুনির্দিষ্ট বলে মনে হচ্ছে।"
পালসুইম

উত্তর:


242

অন্যান্য ভাষায় যেমন:

  • ++x (প্রাক-ইনক্রিমেন্ট) এর অর্থ "পরিবর্তনশীল বৃদ্ধি; অভিব্যক্তির মান চূড়ান্ত মান"
  • x++ (পোস্ট-ইনক্রিমেন্ট) এর অর্থ "আসল মানটি মনে রাখুন, তারপরে পরিবর্তনশীল বৃদ্ধি করুন; অভিব্যক্তির মান হ'ল মূল মান"

এখন যখন স্ট্যান্ডেলোন স্টেটমেন্ট হিসাবে ব্যবহৃত হয়, তখন তাদের একই অর্থ হয়:

x++;
++x;

পার্থক্য তখনই আসে যখন আপনি অন্য কোথাও প্রকাশের মান ব্যবহার করেন। উদাহরণ স্বরূপ:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

13
অভিশাপ, আমি যদি একটি ব্যবহারিক jsfiddle উত্তর লোড করা বন্ধ না করতাম তবে আমি একটি উত্তরে আপনাকে প্রায় মারলাম। ;-)
ক্রিস

2
আপনি যদি এর + 1পরিবর্তে ব্যবহার করেন তবে কেমন লাগবে ++? সংখ্যা যুক্ত করার আগে বা পরে বাড়ানোর কোনও উপায় আছে কি?
কেভন

আমি জানতে চাই আপনি কেন এই অপারেশন কনস্ট r1 = (x ++) + (x ++) করেন; এটি আপনার উদাহরণ অনুসারে প্রত্যাশিত ফলাফল দেয় না।
জিন জিমেনিজ

1
@ জিন জিমেনিজ: ভাল এটি আমার প্রত্যাশার ফলাফল তৈরি করে । উদাহরণস্বরূপ, যদি x10 হিসাবে শুরু হয় তবে এর মান r121 হয়, যা 10 + 11। প্রথম মান x++অভিব্যক্তি 10 এবং x11 মান বৃদ্ধি হয় দ্বিতীয় মান x++অভিব্যক্তি 11 এবং x12. করার মান বৃদ্ধি হয়
জন স্কিট

প্রিয় @ জোনস্কিট সেই দ্রুতগতির প্রতিক্রিয়াটির জন্য ধন্যবাদ, আমি জাভাস্ক্রিপ্ট শিখতে নতুন এবং আমার বিভ্রান্তি কেন একটি বৃদ্ধি এবং অন্যজন কেন তা নয় regarding
জিন জিমেনিজ

43
  • ++x মান বৃদ্ধি করে, তারপরে মূল্যায়ন করে তা সঞ্চয় করে।
  • x++ মানটি মূল্যায়ন করে, তারপরে বৃদ্ধি এবং সঞ্চয় করে।
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

মনে রাখবেন ++xযেখানে সম্ভব সেখানে ব্যবহার করার জন্য সামান্য পারফরম্যান্স সুবিধা রয়েছে কারণ আপনি ভেরিয়েবলটি পড়েন, এটিকে সংশোধন করেন, তারপরে এটি মূল্যায়ন এবং সংরক্ষণ করুন। x++অপারেটর বনাম যেখানে আপনি মানটি পড়েন, মূল্যায়ন করুন, এটি সংশোধন করুন, তারপরে এটি সঞ্চয় করুন।


7

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

উদাহরণের জন্য http://jsfiddle.net/xaDC4/ দেখুন ।



0
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1

0

আমি পোস্ট-ইনক্রিমেন্ট এবং প্রাক-ইনক্রিমেন্ট বোঝার একটি ব্যাখ্যা করেছি। সুতরাং আমি এটি এখানে রাখছি।

বরাদ্দ দেয় 0করারx

let x = 0;

পোস্ট-ইনক্রিমেন্ট দিয়ে শুরু করা যাক

console.log(x++); // Outputs 0

কেন?

x++এক্সপ্রেশনটি ভেঙে ফেলা যাক

x = x;
x = x + 1;

প্রথম বিবৃতিটি xযার মান প্রদান করে0

এবং পরে যখন আপনি xভেরিয়েবলটি যে কোনও জায়গায় ব্যবহার করেন , তারপরে দ্বিতীয় বিবৃতিটি কার্যকর করা হয়

দ্বিতীয় বিবৃতি এই x + 1অভিব্যক্তিটির মান প্রদান করে যা এটি(0 + 1) = 1

xএই রাষ্ট্রের মানটি মনে রাখবেন যা1

এখন প্রি-ইনক্রিমেন্ট দিয়ে শুরু করা যাক

console.log(++x); // Outputs 2

কেন?

++xএক্সপ্রেশনটি ভেঙে ফেলা যাক

x = x + 1;
x = x;

প্রথম বিবৃতিটি এই x + 1এক্সপ্রেশনটির মান প্রদান করে যা এটি(1 + 1) = 2

দ্বিতীয়ত বিবৃতি মূল্যের ফেরৎ xযা 2তাই x = 2এভাবেই আয়2

আশা করি এটি পোস্ট-ইনক্রিমেন্ট এবং প্রাক-ইনক্রিমেন্ট কী তা বুঝতে আপনাকে সহায়তা করবে!

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