একটি পেশাদারী গণিতজ্ঞ আমি দেখতে Javscript এর অভিন্নতা অপারেটর == (এছাড়াও "বিমূর্ত তুলনা", "আলগা সমতা" বলা একটি বিল্ড করার একটি প্রয়াস) সমানতা সম্পর্ক সত্ত্বা মধ্যে, যা হচ্ছে অন্তর্ভুক্ত আত্মবাচক , প্রতিসম এবং সকর্মক । দুর্ভাগ্যক্রমে, এই তিনটি মৌলিক বৈশিষ্ট্যের মধ্যে দুটি ব্যর্থ:
A == A যেমন মিথ্যা হতে পারে, যেমন
NaN == NaN // false
A == Bএবং B == Cএকসাথে বোঝানো হয় না A == C, যেমন
'1' == 1 // true
1 == '01' // true
'1' == '01' // false
শুধুমাত্র প্রতিসম সম্পত্তি বেঁচে থাকে:
A == Bবোঝানো হয় B == A, কোন লঙ্ঘন সম্ভবত কোনও অবস্থাতেই কল্পনাতীত এবং গুরুতর বিদ্রোহের দিকে পরিচালিত করবে;)
সমতা সম্পর্কের বিষয়টি কেন?
কারণ এটি সবচেয়ে গুরুত্বপূর্ণ এবং প্রচলিত প্রকারের সম্পর্ক, অসংখ্য উদাহরণ এবং অ্যাপ্লিকেশন দ্বারা সমর্থিত। সর্বাধিক গুরুত্বপূর্ণ অ্যাপ্লিকেশন হ'ল সমতা শ্রেণিতে সংস্থাগুলি পচে যাওয়া , যা সম্পর্ককে বোঝার নিজেই একটি খুব সুবিধাজনক এবং স্বজ্ঞাত উপায়। এবং সমতুল্য হতে ব্যর্থতা সমতুল্য শ্রেণীর অভাবের দিকে পরিচালিত করে, যার ফলস্বরূপ স্বজ্ঞাত এবং অপ্রয়োজনীয় জটিলতার অভাব দেখা দেয়।
==অ-সমতা সম্পর্কের জন্য লিখতে কেন এমন ভয়াবহ ধারণা ?
কারণ এটি আমাদের পরিচিতি এবং অন্তর্দৃষ্টি ভঙ্গ করে, আক্ষরিক অর্থে মিল, সাম্যতা, একত্রিতকরণ, আইসোমরফিজম, পরিচয় ইত্যাদির কোনও আকর্ষণীয় সম্পর্ক একটি সমতা।
রূপান্তর টাইপ করুন
স্বজ্ঞাত সমতুল্যের উপর নির্ভর করার পরিবর্তে জাভাস্ক্রিপ্ট প্রকার রূপান্তরটি প্রবর্তন করে:
সমতা অপারেটর অপারেন্ডগুলিকে রূপান্তর করে যদি তারা একই ধরণের না হয়, তবে কঠোর তুলনা প্রয়োগ করে।
তবে ধরণের রূপান্তর কীভাবে সংজ্ঞায়িত হয়? বিভিন্ন ব্যতিক্রম সহ জটিল নিয়মের একটি সেট মাধ্যমে?
সমতুল্য সম্পর্ক গড়ে তোলার চেষ্টা করা
Booleans। স্পষ্টত trueএবং falseএকই নয় এবং বিভিন্ন শ্রেণিতে হওয়া উচিত।
নাম্বার। ভাগ্যক্রমে, সংখ্যার সাম্যতা ইতিমধ্যে সুস্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে, যেখানে দুটি পৃথক সংখ্যা কখনও একই সমতুল্য শ্রেণিতে হয় না। গণিতে, তা। জাভাস্ক্রিপ্টে সংখ্যা ধারণা কিছুটা বিকৃত আরো বহিরাগত উপস্থিতিতে মাধ্যমে -0, Infinityএবং -Infinity। আমাদের গাণিতিক স্বজ্ঞা dictates যে 0এবং -0একই শ্রেণীতে হওয়া উচিত (আসলে -0 === 0হয় true), যেহেতু অসীমতার প্রতিটি আলাদা বর্গ।
নম্বর এবং বুলিয়ান। নম্বর ক্লাস দেওয়া, আমরা বুলিয়ান কোথায় রাখব? falseএর সাথে 0সাদৃশ্য trueহয়ে যায় , যেখানে 1অন্যের মতো হয় তবে একই রকম হয় :
true == 1 // true
true == 2 // false
কোনো মানে হয় এখানে রাখুন হয় trueএকসাথে 1? স্বীকৃতভাবে 1পৃথক করা হয়, কিন্তু তাই হয় -1। আমি ব্যক্তিগতভাবে রূপান্তর trueকরার কোনও কারণ দেখতে পাচ্ছি না 1।
এবং এটি আরও খারাপ হয়:
true + 2 // 3
true - 1 // 0
সুতরাং trueপ্রকৃতপক্ষে 1সমস্ত সংখ্যার মধ্যে রূপান্তরিত হয় ! এটা কি যৌক্তিক? এটা স্বজ্ঞাত? উত্তরটি অনুশীলন হিসাবে রেখে গেছে;)
তবে এ সম্পর্কে কী:
1 && true // true
2 && true // true
শুধুমাত্র বুলিয়ান xসঙ্গে x && trueহচ্ছে trueহয় x = true। যা প্রমাণ করে যে উভয় 1এবং 2(এবং অন্য কোনও সংখ্যা 0) উভয়ই রূপান্তর করে true! এটি যা দেখায় তা হ'ল আমাদের রূপান্তরটি আরেকটি গুরুত্বপূর্ণ সম্পত্তি ব্যর্থ করে - হ'ল বাইজেশন । অর্থ দুটি পৃথক সত্তা একই একতে রূপান্তর করতে পারে। যা নিজে থেকেই বড় সমস্যা হতে হবে না। বড় সমস্যা দেখা দেয় যখন আমরা এই রূপান্তরটি ব্যবহার করি যা আমরা যাকে বলতে চাই তার "অনুরূপতা" বা "আলগা সমতা" এর একটি সম্পর্ক বর্ণনা করতে। তবে একটি বিষয় স্পষ্ট - এটি কোনও সমতার সম্পর্ক হতে যাচ্ছে না এবং এটি সমতুল্য শ্রেণীর মাধ্যমে স্বজ্ঞাতভাবে বর্ণনা করা হবে না।
তবে আমরা কি আরও ভাল করতে পারি?
কমপক্ষে গাণিতিকভাবে - অবশ্যই হ্যাঁ! বুলিয়ান এবং সংখ্যার মধ্যে একটি সাধারণ সমতা সম্পর্ক কেবল falseএবং 0একই শ্রেণিতে থাকার সাথে নির্মিত হতে পারে । সুতরাং false == 0একমাত্র তুচ্ছ looseিলা সমতা হবে।
স্ট্রিং সম্পর্কে কি?
আমরা গোড়া স্পেসগুলি থেকে শুরুতে এবং শেষে সংখ্যায় রূপান্তর করতে স্ট্রিংগুলি ছাঁটাতে পারি, এছাড়াও আমরা সামনে শূন্যগুলি উপেক্ষা করতে পারি:
' 000 ' == 0 // true
' 0010 ' == 10 // true
সুতরাং আমরা একটি স্ট্রিংয়ের জন্য একটি সহজ নিয়ম পাই - সামনে শ্বেতস্থান এবং শূন্যগুলি ছাঁটাই। হয় আমরা একটি নম্বর বা খালি স্ট্রিং পাই, এক্ষেত্রে আমরা সেই নম্বর বা শূন্যে রূপান্তর করি। অথবা আমরা একটি নম্বর পাই না, সেই ক্ষেত্রে আমরা রূপান্তর করি না এবং তাই কোনও নতুন সম্পর্ক পাই না।
এইভাবে আমরা বুলিয়ানস, সংখ্যা এবং স্ট্রিংয়ের মোট সেটটিতে একটি নিখুঁত সমতুল্য সম্পর্ক পেতে পারি! তা বাদে ... জাভাস্ক্রিপ্ট ডিজাইনারদের স্পষ্টতই অন্য একটি মতামত রয়েছে:
' ' == '' // false
সুতরাং যে দুটি স্ট্রিং উভয়ই রূপান্তরিত করে 0তা হঠাৎ অ-অনুরূপ! কেন বা কেন? নিয়ম অনুসারে, স্ট্রিংগুলি সুনির্দিষ্টভাবে সমান হয় যখন তারা কঠোরভাবে সমান হয়! এই নিয়মটি আমরা দেখতে পেলাম কেবল সংক্রমণকেই ভেঙে দেয় তা নয়, এটি অনর্থকও! অন্য অপারেটরটিকে একে অপরের ==সাথে একেবারে সাদৃশ্যপূর্ণ করার জন্য কী লাভ ===?
উপসংহার
আলগা সাম্য অপারেটরটি ==যদি কিছু মৌলিক গাণিতিক আইন মেনে চলত তবে খুব কার্যকর হতে পারত। তবে এটি দুঃখজনকভাবে হয় না, এর উপযোগিতা ভোগ করে।