অসামঞ্জস্যিত প্রকার: ইন্টকে বুলিয়ান রূপান্তর করা যায় না
আমি কেন আগ্রহী যে সি এটির অনুমতি দেয় না এবং জাভা কেন দেয় না। অতএব, আমি ভাষার টাইপ সিস্টেমে বিশেষত এর দৃness়তার বিষয়ে আগ্রহী।
আপনার প্রশ্নের দুটি অংশ রয়েছে:
জাভা কেন রূপান্তর করে int
না boolean
?
যতটা সম্ভব স্পষ্ট করার উদ্দেশ্যে জাভাতে এটি ফোটে। এটি খুব স্ট্যাটিক, খুব টাইপ সিস্টেমের সাথে "আপনার মুখে"। অন্যান্য ভাষায় স্বয়ংক্রিয়ভাবে টাইপ-কাস্ট করা জিনিসগুলি জাভাতে হয় না। আপনাকেও লিখতে হবে int a=(int)0.5
। রূপান্তর float
করার int
তথ্য হারাবে; রূপান্তর হিসাবে একই int
থেকেboolean
এবং এইভাবে ত্রুটি-প্রবণ হবে। এছাড়াও, তাদের প্রচুর সংমিশ্রণ নির্দিষ্ট করতে হবে। অবশ্যই, এই জিনিসগুলি সুস্পষ্ট বলে মনে হচ্ছে তবে তারা সাবধানতার দিক থেকে ভুল করার চেষ্টা করেছিল।
ওহ, এবং অন্যান্য ভাষার তুলনায় জাভা তার স্পেসিফিকেশনে অত্যন্ত নির্ভুল ছিল , কারণ বাইটকোডটি কেবল অভ্যন্তরীণ বাস্তবায়ন বিশদ ছিল না। তাদের যে কোনও এবং সমস্ত মিথস্ক্রিয়া নির্দিষ্ট করে দিতে হবে। বিশাল উদ্যোগ গ্রহণ।
কেন if
অন্য ধরণের গ্রহণ না boolean
?
if
অন্য ধরণের তুলনায় অনুমতি হিসাবে পুরোপুরি ভাল সংজ্ঞায়িত করা যেতে পারে boolean
। এটির একটি সংজ্ঞা থাকতে পারে যা বলে যে নিম্নলিখিতটি সমতুল্য:
true
int != 0
String
সঙ্গে .length>0
- অন্য কোনও অবজেক্ট রেফারেন্স যা অ-
null
(এবং Boolean
মান সহ নয় false
)।
- বা এমনকি: অন্য কোনও অবজেক্ট রেফারেন্স যা অ-
null
এবং যার পদ্ধতি Object.check_if
(কেবলমাত্র এই উপলক্ষে আমার দ্বারা উদ্ভাবিত) ফিরে আসে true
।
তারা করেনি; এর কোন সত্যিকারের প্রয়োজন ছিল না এবং তারা এটিকে যতটা সম্ভব শক্তিশালী, স্থির, স্বচ্ছ, সহজেই পড়তে পারাতে চেয়েছিল। কোনও অন্তর্নিহিত বৈশিষ্ট্য নেই। এছাড়াও, বাস্তবায়নটি বেশ জটিল হবে, আমি নিশ্চিত, সমস্ত সম্ভাব্য ক্ষেত্রে প্রতিটি মান পরীক্ষা করে দেখাতে হবে, সুতরাং পারফরম্যান্সটি একটি ছোট্ট ফ্যাক্টরও খেলতে পারে (জাভা সেদিনের কম্পিউটারগুলিতে স্লুও ছিল; সেখানে মনে রাখবেন প্রথম প্রকাশের সাথে কোনও জেআইটি সংকলক ছিল না, কমপক্ষে আমি তখন ব্যবহৃত কম্পিউটারগুলিতে ছিলাম না)।
গভীর কারণ
এর আরও গভীর কারণ এটি সত্য যে জয়াতে আদিম ধরণের রয়েছে তা হতে পারে, সুতরাং এর টাইপ সিস্টেমটি বস্তু এবং আদিমদের মধ্যে ছিঁড়ে যায়। হতে পারে, যদি তারা এগুলি এড়িয়ে চলত, তবে জিনিসগুলি অন্য কোনও উপায় হতে পারে। পূর্ববর্তী বিভাগে দেওয়া বিধিগুলি সহ, তাদের প্রতিটি একক আদিমতার স্পষ্টতাই সংজ্ঞা দিতে হবে (যেহেতু আদিমরা একটি সুপার বর্গ ভাগ করে না, এবং আদিমদের null
জন্য কোনও ভাল সংজ্ঞায়িত হয় না )। এটি দ্রুত একটি দুঃস্বপ্নে পরিণত হবে।
চেহারা
ভাল, এবং শেষ পর্যন্ত, সম্ভবত এটি ভাষা ডিজাইনারদের কেবল একটি পছন্দ। প্রতিটি ভাষা তাদের নিজস্ব উপায়ে স্পিন করে বলে মনে হচ্ছে ...
উদাহরণস্বরূপ, রুবির কোনও প্রকারভেদ নেই। আক্ষরিক অর্থে সমস্ত কিছু, একটি বস্তু। প্রতিটি বস্তুর একটি নির্দিষ্ট পদ্ধতি রয়েছে কিনা তা নিশ্চিত করার জন্য তাদের খুব সহজ সময় রয়েছে।
রুবি আপনি যে কোনও ধরণের বস্তু এড়াতে পারেন তার সত্যতা খুঁজছেন। আকর্ষণীয়ভাবে যথেষ্ট, এটির এখনও কোনও boolean
প্রকার নেই (কারণ এটি কোনও আদিম নেই), এবং এটির কোনও শ্রেণিও নেই Boolean
। যদি আপনি জিজ্ঞাসা করেন কোন শ্রেণীর মানটি true
রয়েছে (সহ সহজেই উপলব্ধ true.class
) তবে আপনি পাবেন TrueClass
। এই শ্রেণিতে আসলে পদ্ধতি রয়েছে, যিনি বুলিয়ানগুলির জন্য 4 অপারেটর ( | & ^ ==
)। এখানে, if
এর মান falsey বিবেচনায় যদি এবং কেবল যদি এটা হয় হয় false
বা nil
( null
রুবি)। বাকি সবই সত্য। সুতরাং, 0
বা ""
উভয় সত্য।
তাদের পক্ষে এমন একটি পদ্ধতি তৈরি করা তুচ্ছ হত Object#truthy?
যা কোনও শ্রেণীর জন্য প্রয়োগ করা যেতে পারে এবং স্বতন্ত্র সত্যতা ফিরিয়ে দিতে পারে। উদাহরণস্বরূপ, String#truthy?
খালি খালি স্ট্রিং বা হোয়ট নোটের ক্ষেত্রে সত্য হতে বাস্তবায়ন করা যেতে পারে। তারা করেনি, যদিও রুবি বেশিরভাগ বিভাগে জাভা বিরোধী (মিক্সিন সহ গতিশীল হাঁস-টাইপিং, পুনরায় খোলার ক্লাস এবং এগুলি সমস্ত)।
যা পার্ল প্রোগ্রামারের কাছে আশ্চর্যজনক হতে পারে যিনি $value <> 0 || length($value)>0 || defined($value)
সত্যবাদী হয়ে অভ্যস্ত। ইত্যাদি।
এসকিউএলকে এর কনভেনশন সহ প্রবেশ করুন যে null
কোনও অভিব্যক্তির ভিতরে স্বয়ংক্রিয়ভাবে এটিকে মিথ্যা করে তোলে, তা যাই হোক না কেন। তাই (null==null) = false
। রুবিতে (nil==nil) = true
,। খুশি বার.