পিএইচপি ===
তুলনায় দ্রুত কেন ==
?
=== vs ==
, কিন্তু জাভাস্ক্রিপ্ট মধ্যে, এখানে পড়তে পারেন: stackoverflow.com/questions/359494/...
পিএইচপি ===
তুলনায় দ্রুত কেন ==
?
=== vs ==
, কিন্তু জাভাস্ক্রিপ্ট মধ্যে, এখানে পড়তে পারেন: stackoverflow.com/questions/359494/...
উত্তর:
কারণ সাম্যতা অপারেটর ==
কোরেস করে, বা রূপান্তরিত হয়, ডাটা অপারেটিংয়ের জন্য অস্থায়ীভাবে টাইপ করে এটি অন্য অপারেন্ডের সমান কিনা তা দেখতে, যেখানে ===
(পরিচয় অপারেটর) কোনও রূপান্তর করার প্রয়োজন নেই এবং এইভাবে কম কাজ করা হয় যা এটি দ্রুততর করে তোলে।
প্রথমে, === দুটি আর্গুমেন্ট একই ধরণের কিনা তা পরীক্ষা করে দেখা যায় - সুতরাং কোনও তুলনা করার আগে সংখ্যা 1 এবং স্ট্রিং '1' টাইপ চেকটিতে ব্যর্থ হয়। অন্যদিকে, == প্রথমে প্রকারটি পরীক্ষা করে না এবং এগিয়ে যায় এবং উভয় যুক্তি একই ধরণের রূপান্তর করে এবং তারপরে তুলনা করে।
অতএব, === একটি ব্যর্থ শর্তটি পরীক্ষা করা দ্রুত
==
কোনও ধরণের রূপান্তর করার দরকার আছে কিনা তা দেখতে প্রথমে প্রকারটি পরীক্ষা করে দেখুন। সত্য যে ===
নিম্নলিখিত ধাপে কোনো রূপান্তর করে না তোলে কি দ্রুততর।
দুটি বিষয় বিবেচনা করতে হবে:
প্রতীক ধরনের তারপর বিভিন্ন হন ==
এবং ===
উত্পাদন ভিন্ন ফলাফল । সেক্ষেত্রে অপারেটরদের গতির কিছু যায় আসে না; কোনটি গুরুত্বপূর্ণ যা কোনটি পছন্দসই ফলাফল দেয়।
প্রতীক ধরনের একই হয়, তাহলে আপনি ব্যবহার করতে পারেন ==
বা ===
উভয় হিসাবে উত্পাদন করা হবে একই ফলাফল । সেক্ষেত্রে উভয় অপারেটরের গতি প্রায় অভিন্ন। এটি কারণ অপারেটররা কোনও ধরণের রূপান্তর সম্পাদন করে না।
আমি এর গতি তুলনা করেছি:
$a == $b
বনাম $a === $b
$a
এবং $b
এলোমেলো পূর্ণসংখ্যার [1, 100] ছিলএবং ফলাফল এখানে:
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
আপনি দেখতে পাবেন যে গতিটি প্রায় অভিন্ন।
এটি উল্লেখযোগ্যভাবে দ্রুত কিনা তা আমি সত্যিই জানি না, তবে বেশিরভাগ ভাষায় === হ'ল সরাসরি ধরণের তুলনা, যখন == কোনও ম্যাচ পাওয়ার জন্য প্রয়োজনীয় / সম্ভব হলে টাইপ জবরদস্তি করার চেষ্টা করবে।
কারণ ===
অপারেটরদের তুলনা করার আগে তাদের একই ধরণের হতে বাধ্য করার দরকার নেই ।
আমি সন্দেহ করি গতির পার্থক্য যদিও খুব বেশি। সাধারণ পরিস্থিতিতে আপনার যে কোনও অপারেটর আরও বোধগম্য হন তা ব্যবহার করা উচিত।
উপসংহারে === দ্রুততর কারণ দুটি ভেরিয়েবলের একই মান আছে কিনা তা দেখার জন্য ডাটা টাইপকে রূপান্তরিত করে না, তবে যখন দুটি ভেরিয়েবলের সমান মান রয়েছে তা দেখার প্রয়োজন হলে আপনি == ব্যবহার করবেন যদি কোন ধরণের ভেরিয়েবল হয় তবে তা ব্যবহার করবেন না , বা === যদি ভেরিয়েবলের ধরণও গুরুত্বপূর্ণ হয়।
দ্রুত সঞ্চালনের সময় কেবল দ্রুত পরিমাপ করা উচিত নয় (সরাসরি পারফরম্যান্স টেস্টগুলি এই ক্ষেত্রে প্রায় নগণ্য)। এটি বলেছিল, আমার পুনরুক্তি বা পুনরাবৃত্তির সাথে জড়িত একটি পরীক্ষা দেখতে হবে যা সত্যই তাৎপর্যপূর্ণ, ক্রমগত পার্থক্য আছে কিনা তা দেখার জন্য (যখন বাস্তবের প্রসঙ্গে ব্যবহৃত হয়)। প্রান্তের কেসগুলি মোকাবেলা করার সময় আপনি যে টেস্টিং এবং ডিবাগিং সময়টি সংরক্ষণ করবেন সেটি আপনার পক্ষেও অর্থপূর্ণ হওয়া উচিত
পিএইচপি (সি কোড) এর মান একটি "শ্রেণি" এর মতো:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
যখন আপনার তুলনা করা হয় $a == $b
এবং $a
হয় int
ধরন, সেখানে ভালো কিছু হবে:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
তবে string
'1'
আসকি কোডে কাস্ট করা হবে না 49
, এটি হবে 1
।
আপনি যখন তুলনা করা হয় $a === $b
এবং $a
হয় int
ধরন, মত someting হবে:
if ($a->int_ == $b->int_)
যদি পরীক্ষার ফলাফলগুলি সঠিক হয় তবে অবশ্যই এটি সংকলক সমস্যা হতে হবে,
প্রসেসর একটি ঘড়ির চক্রে যা বলা বলা তা করবে
যদি এটির কাজ কম হয় তবে তা করা দ্রুত হবে
যোগ:
আহ ভাল আসলে যদি সংকলক ইতিমধ্যে প্রক্রিয়াজাতকরণের জন্য মেশিন কোডের প্রচুর পরিমাণ তৈরি করে ফেলেছে, তবে যদি এটি ইতিমধ্যে কোন ধরণের ডেটা তুলনা করা প্রয়োজন তা মোকাবেলায় যদি লক্ষ লক্ষ জিনিস যোগ করে থাকে তবে একটি "অপ্রাপ্তবয়স্ক" আইএফ অপসারণের গতি খুব বেশি পরিবর্তন করবে না মোটেই
যদি এখনও কেউ এটি পড়েন তবে আমি আরও আলোচনায় আগ্রহী।
ফিল