উত্তর:
~
এটি একটি বিটওয়াস অপারেটর যা এর অপরেন্ডে সমস্ত বিটগুলি ফ্লিপ করে।
উদাহরণস্বরূপ, যদি আপনার নম্বরটি হয় 1
তবে আইইইই 754 এর ফ্লোটের বাইনারি উপস্থাপনা (জাভাস্ক্রিপ্ট সংখ্যাগুলি কীভাবে আচরণ করে) হবে ...
0011 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
সুতরাং ~
এর অপারেন্ডটিকে 32 বিট পূর্ণ সংখ্যায় রূপান্তরিত করে (জাভাস্ক্রিপ্টে বিটওয়াইস অপারেটররা তা করে) ...
0000 0000 0000 0000 0000 0000 0000 0001
যদি এটি একটি নেতিবাচক সংখ্যা হয় তবে এটি 2 এর পরিপূরকতে সংরক্ষণ করা হবে: সমস্ত বিট উল্টে 1 টি যুক্ত করুন।
... এবং তারপরে বিটগুলি ফ্লিপ করে ...
1111 1111 1111 1111 1111 1111 1111 1110
তা হলে এর ব্যবহার কী? কেউ কখন এটি ব্যবহার করতে পারে?
এটির বেশ কয়েকটি ব্যবহার রয়েছে। আপনি যদি নিম্ন স্তরের জিনিস লিখছেন তবে এটি কার্যকর hand আপনি যদি নিজের অ্যাপ্লিকেশনটির প্রোফাইল দেন এবং কোনও বাধা পেয়ে থাকেন তবে বিটওয়াইজ ট্রিকস ( আরও বড় ব্যাগের মধ্যে একটি সম্ভাব্য সরঞ্জাম হিসাবে) ব্যবহার করে এটি আরও পারফরম্যান্ট করা যেতে পারে ।
এটি একটি (সাধারণত) স্পষ্ট নয় কৌতুক চালু করতে indexOf()
's পাওয়া মধ্যে ফেরত মান truthy (যখন তৈরীর পাওয়া যেমন falsy ) এবং মানুষ প্রায়ই এটা দ্বিগুন দ্বারা 32 বিট সংখ্যা ছিন্ন (এবং তার দশমিক স্থান ড্রপ তার পার্শ্ব প্রতিক্রিয়া জন্য এটি ব্যবহার, কার্যকরভাবে Math.floor()
ধনাত্মক সংখ্যার জন্য একই )।
আমি অস্পষ্ট বলেছি কারণ এটি কী ব্যবহার করা হচ্ছে তা অবিলম্বে পরিষ্কার নয়। সাধারণত, আপনি চান যে আপনার কোড এটি পড়তে থাকা অন্য ব্যক্তির সাথে স্পষ্টভাবে যোগাযোগ করবে। ব্যবহার করার সময় ~
দেখতে দেখতে দুর্দান্ত লাগছে, এটি সাধারণত নিজের ভালোর জন্য খুব চালাক। :)
এছাড়া কম প্রাসঙ্গিক এখন যে জাভাস্ক্রিপ্ট গেছে Array.prototype.includes()
এবং String.prototype.includes()
। এগুলি একটি বুলিয়ান মান প্রদান করে। যদি আপনার লক্ষ্য প্ল্যাটফর্ম (গুলি) এটি সমর্থন করে তবে আপনার স্ট্রিং বা অ্যারেতে একটি মানের অস্তিত্বের জন্য এটি পরীক্ষা করার জন্য পছন্দ করা উচিত।
value = value || default
জাভাস্ক্রিপ্টে একটি সাধারণ এবং বৈধ প্রজ্ঞাপন যতক্ষণ আপনি জানেন যে আপনি কখন এটি ব্যবহার করতে পারবেন এবং করতে পারবেন না।
v = t ? a : b;
। আমি প্রায় var v; if (t} { v = a; } else { v = b; }
5+ লাইন জুড়ে বিচ্ছিন্ন হয়ে ওঠার চেয়ে আরও স্পষ্ট দেখতে পাই var v = b; if (t) { v = a; }
যা সাধারণত 4+ লাইন হতে পারে। তবে আমি প্রচুর লোককে ? :
অপারেটরদের সাথে পরিচিত না যারা দ্বিতীয় বা তৃতীয় উপায়ে পছন্দ করবে। আমি প্রথমটি আরও পাঠযোগ্য find আমি সাধারণ নীতির সাথে একমত, কোড পরিষ্কার করে, হ্যাক ব্যবহার করবেন না। আমি অনুমান করি আমি এটি ~v.indexOf('...')
একবার শিখে ফেললে খুব পরিষ্কার হতে দেখছি ।
~
অভিব্যক্তি বলব না । এটা টেকনিক্যালি ভাষা অংশ বৈশিষ্ট , কিন্তু এটা ভাষার এত অংশ না সাধারণ ব্যবহারে ।
indexOf()
অভিব্যক্তির কার্যকরভাবে কার্যকর হওয়ার আগে এটি ব্যবহার করা আপনাকে সরাসরি ফিরে আসা সংখ্যার সূচকের পরিবর্তে সত্যবাদী / মিথ্যা ফলাফল দেয়।
যদি ফেরত মান হয় -1
, তাহলে ~-1
হয় 0
কারণ -1
সব 1 বিট একটি স্ট্রিং। শূন্যের চেয়ে বড় বা সমান যে কোনও মান একটি শূন্য-ফলাফল দেয়। সুতরাং,
if (~someString.indexOf(something)) {
}
if
"কিছু" যখন "কিছু স্ট্রিং" এ থাকে তখন কোডটি চালানোর কারণ ঘটায়। আপনি যদি .indexOf()
সরাসরি বুলিয়ান হিসাবে ব্যবহার করার চেষ্টা করেন তবে তা কার্যকর হবে না কারণ কখনও কখনও এটি শূন্য হয় (যখন "কিছু" স্ট্রিংয়ের শুরুতে থাকে)।
অবশ্যই এটি কাজ করে:
if (someString.indexOf(something) >= 0) {
}
এবং এটি যথেষ্ট কম রহস্যজনক।
কখনও কখনও আপনি এটি দেখতে পাবেন:
var i = ~~something;
এর ~
মতো দু'বার অপারেটর ব্যবহার করা স্ট্রিংটিকে 32-বিট পূর্ণসংখ্যায় রূপান্তর করার দ্রুত উপায়। প্রথমটি ~
রূপান্তরটি করে এবং দ্বিতীয়টি ~
বিটগুলি পিছনে পিছনে ফেলে। অবশ্যই অপারেটর এমন কোনও কিছুর সাথে প্রয়োগ করা হয় যা কোনও সংখ্যায় রূপান্তর করা যায় না, আপনি NaN
ফলস্বরূপ পান। ( সম্পাদনা করুন - এটি ~
প্রথমে প্রয়োগ করা দ্বিতীয়টি, তবে আপনি ধারণাটি পান।)
~
যখন পূর্ণসংখ্যার উপর সঞ্চালিত হয় সমান -(x + 1)
।
0
হচ্ছে false
এবং অ শূন্য হচ্ছে true
খেজুর পথ ফিরে '70s এবং সম্ভবত অন্যান্য তত্কালীন সমসাময়িক ভাষায় প্রোগ্রামিং সিস্টেম প্রচুর অন্তত সি চাপ দিতে থাকেন। এটি সম্ভবত হার্ডওয়্যার যেভাবে কাজ করে তা থেকে উদ্ভূত হয়েছে; প্রচুর সিপিইউ অপারেশনের পরে শূন্য বিট সেট করে এবং এটি পরীক্ষা করার জন্য সংশ্লিষ্ট শাখার নির্দেশনা দেয়।
| 0
কেবলমাত্র একটি অপারেশন।
~~
ঠিক একইভাবে একটি সাধারণ অ্যাপ্লিকেশনটির ব্যাখ্যা না দেওয়া ।
~
হয় bitwise না অপারেটর , ~x
মোটামুটি মিলে যায় -(x+1)
। এটা বোঝা সহজ, সাজানোর। তাই:
~2; // -(2+1) ==> -3
বিবেচনা করুন -(x+1)
। -1
একটি উত্পাদন করতে যে অপারেশন করতে পারেন 0
।
অন্য কথায়, ~
সংখ্যার মানগুলির ব্যাপ্তি সহ ব্যবহৃত কেবল ইনপুট মানের জন্য একটি মিথ্যা (বাধ্যতামূলক ) false
থেকে মান উত্পন্ন করবে , অন্যথায়, অন্য কোনও সত্যবাদী মান।0
-1
যেমনটি আমরা জানি, -1
সাধারণত একটি সেন্ডিনেল মান বলা হয় । এটা অনেক ফাংশন যে ফিরে আসতে জন্য ব্যবহার করা হয় >= 0
মান সাফল্য এবং -1
জন্য ব্যর্থতা সি ভাষায়। যা indexOf()
জাভাস্ক্রিপ্টে রিটার্ন মান একই নিয়ম ।
এইভাবে অন্য স্ট্রিংয়ের স্ট্রাস্টিংয়ের উপস্থিতি / অনুপস্থিতি পরীক্ষা করা সাধারণ common
var a = "Hello Baby";
if (a.indexOf("Ba") >= 0) {
// found it
}
if (a.indexOf("Ba") != -1) {
// found it
}
if (a.indexOf("aB") < 0) {
// not found
}
if (a.indexOf( "aB" ) == -1) {
// not found
}
তবে ~
নীচের মত এটি করা আরও সহজ হবে
var a = "Hello Baby";
~a.indexOf("Ba"); // -7 -> truthy
if (~a.indexOf("Ba")) { // true
// found it
}
~a.indexOf("aB"); // 0 -> falsy
!~a.indexOf("aB"); // true
if (!~a.indexOf( "aB" )) { // true
// not found
}
-(x+1)
যদি এটি যদি বিবৃতিতে দেখে থাকি তবে আমি এটি দ্বিতীয়বার দেখতে চাই । টিলড আমাকে জানায় যে জাভাস্ক্রিপ্টের 0-ভিত্তিক প্রকৃতির ক্ষতিপূরণ দেওয়ার জন্য এটি ঠিক কী করছে। এছাড়াও, কম বন্ধনী পড়ার জন্য আরও ভাল
if (a.indexOf("Ba") > -1) {// found} //true
, যদিও টিলড উদাহরণগুলির চেয়ে কিছুটা দৈর্ঘ্য, আপনি যে দুটি উদাহরণ দিয়েছেন এবং নতুন প্রোগ্রামারদের জন্য var opinion = !~-1 ? 'more' : 'less'
বোধগম্য তার চেয়ে যথেষ্ট কম ।
~indexOf(item)
বেশিরভাগ সময় উপস্থিত হয়, এবং এখানে উত্তরগুলি দুর্দান্ত, তবে সম্ভবত কিছু লোককে এটি কীভাবে ব্যবহার করতে হবে এবং তত্ত্বটি "এড়িয়ে যান":
if (~list.indexOf(item)) {
// item in list
} else {
// item *not* in list
}
++
এবং --
কারণ তারা "অত্যধিক কৌতূহলকে উত্সাহিত করে" এবং তবুও কোনওরকমে~
বেঁচে গিয়েছিল (ছায়ায় লুকিয়ে থাকা) github.com/airbnb
list.indexOf(item) >= 0
বা ... > -1
জাভাস্ক্রিপ্ট যেহেতু শূন্য-ভিত্তিক ও গোড়া থেকে এই ঠিকানায় চয়ন করা হয়নি। আরও, কেবল মতামত (এয়ারবোনব এর অনুরূপ), জাভাস্ক্রিপ্টে অর্থবহ কিছু করছে এমন যে কেউ জানে ++
এবং যখন --
কম সাধারণ হয়, তখন অর্থটি অনুমান করা যায়।
++
এবং --
কারণ মত আদিম পদ্ধতির একটি সময় map
, forEach
ইত্যাদি আমার পয়েন্ট কেন তারা বিবেচনা না বেশি ~
বেজায় চতুর যখন যাই হোক না কেন মান ব্যবহৃত বৃদ্ধি এবং হ্রাস অপারেটরদের অন্তর্ভুক্ত করা হয়েছে। কিছু নিষেধ করার জন্য যাতে সিআইএস 101 এর কোনও অর্থ হয় না।
ফলাফল থেকে সত্যবাদী মান তৈরি করতে টিলড ট্রিকটি ব্যবহার করার জন্য যারা বিবেচনা করছেন তাদের পক্ষে indexOf
এটি আরও স্পষ্ট এবং এর পরিবর্তে includes
পদ্ধতিটিString
ব্যবহার করার জন্য কম যাদু রয়েছে ।
'hello world'.includes('hello') //=> true
'hello world'.includes('kittens') //=> false
নোট করুন যে এটি ES 2015 হিসাবে একটি নতুন মান পদ্ধতি তাই এটি পুরানো ব্রাউজারগুলিতে কাজ করবে না। যে ক্ষেত্রে এটি গুরুত্বপূর্ণ, স্ট্রিং.প্রোটোটাইপ.পলিটফিল সহ বিবেচনা করুন ।
এই বৈশিষ্ট্যটি একই সিনট্যাক্স ব্যবহার করে অ্যারেগুলির জন্যও উপলব্ধ :
['apples', 'oranges', 'cherries'].includes('apples') //=> true
['apples', 'oranges', 'cherries'].includes('unicorns') //=> false
আপনার যদি পুরানো ব্রাউজার সমর্থন প্রয়োজন হয় তবে এখানে অ্যারে.প্রোটোটাইপ.পলিটফিল অন্তর্ভুক্ত রয়েছে ।