অন্তর্নিহিত রূপান্তরগুলি করা বেশ সম্ভব। আপনি যখন সমস্যায় পড়েন সেই পরিস্থিতিটি যখন আপনি জানেন না যে কোন উপায়ে কোনও কাজ করা উচিত।
এর উদাহরণ জাভাস্ক্রিপ্টে দেখা যায় যেখানে +
অপারেটর বিভিন্ন সময়ে বিভিন্ন উপায়ে কাজ করে।
>>> 4 + 3
7
>>> "4" + 3
43
>>> 4 + "3"
43
যদি আর্গুমেন্টগুলির মধ্যে একটি স্ট্রিং হয়, তবে +
অপারেটরটি একটি স্ট্রিং কনক্রিটেশন, অন্যথায় এটি সংযোজন।
যদি আপনাকে একটি যুক্তি দেওয়া হয় এবং এটি স্ট্রিং বা পূর্ণসংখ্যা কিনা তা জানেন না এবং এটির সাথে যোগ করতে চান, এটি কিছুটা গোলমাল হতে পারে।
এটির সাথে মোকাবিলা করার আরেকটি উপায় হ'ল বেসিক হেরিটেজ (যেটি পার্ল অনুসরণ করে - দেখুন প্রোগ্রামিংটি হার্ড, আসুন স্ক্রিপ্টিং যান ... )
বেসিকটিতে, len
ফাংশনটি কেবল স্ট্রিংয়ের সাথে যুক্ত হওয়ার অর্থ দেয় ( ভিজ্যুয়াল বেসিকের জন্য ডকস : "কোনও বৈধ স্ট্রিং এক্সপ্রেশন বা ভেরিয়েবল নামের Exp ফাইলপুট ফাংশন। ")।
পার্ল প্রসঙ্গের এই ধারণাটি অনুসরণ করে। বিভ্রান্তির যে জন্য ধরনের অন্তর্নিহিত রূপান্তর সঙ্গে জাভাস্ক্রিপ্ট বিদ্যমান +
অপারেটর কখনও কখনও উপরন্তু হচ্ছে এবং কখনো কখনো সংযুক্তকরণের Perl ঘটতে না কারণ +
হয় সবসময় উপরন্তু এবং .
হয় সবসময় সংযুক্তকরণের।
যদি কোনও স্কেলারের প্রসঙ্গে কিছু ব্যবহৃত হয়, তবে এটি একটি স্কেলার (উদাহরণস্বরূপ স্কেলার হিসাবে একটি তালিকা ব্যবহার করে, তালিকাটি তার দৈর্ঘ্যের সাথে সম্পর্কিত একটি সংখ্যা হিসাবে মনে হয়)। আপনি যদি স্ট্রিং অপারেটর ব্যবহার করেন ( eq
সমতা পরীক্ষার cmp
জন্য, স্ট্রিং তুলনার জন্য) স্কেলারটি এমনভাবে ব্যবহৃত হয় যেন এটি স্ট্রিং was তেমনি, যদি কোনও গণিতের প্রসঙ্গে ( ==
সমতা পরীক্ষার <=>
জন্য এবং সংখ্যাসূচক তুলনার জন্য) কিছু ব্যবহার করা হত তবে স্কেলারটি ব্যবহার করা হয় যেন এটি একটি সংখ্যা।
সমস্ত প্রোগ্রামিংয়ের মৌলিক নিয়ম হ'ল "এমন কাজটি করুন যা ব্যক্তিকে সবচেয়ে কম অবাক করে"। এর অর্থ এই নয় যে সেখানে কোনও আশ্চর্যতা নেই, তবে চেষ্টাটি সেই ব্যক্তিকে সবচেয়ে অবাক করে দেওয়ার।
পার্ল - পিএইচপি এর নিকটতম মামাতো ভাইয়ের কাছে গিয়ে এমন পরিস্থিতি রয়েছে যেখানে অপারেটর স্ট্রিং বা সংখ্যাগত প্রসঙ্গে যে কোনও বিষয়ে কাজ করতে পারে এবং আচরণটি লোকদের জন্য অবাক করে দিতে পারে। ++
অপারেটর এক ধরনের উদাহরণ। সংখ্যায়, এটি প্রত্যাশার মতো ঠিক আচরণ করে। কোনও স্ট্রিংয়ের উপর অভিনয় করার সময় যেমন "aa"
স্ট্রিংটিকে ( $foo = "aa"; $foo++; echo $foo;
প্রিন্টগুলি ab
) বাড়িয়ে তোলে । এটি az
বর্ধিত হবে যাতে যখন বর্ধিত হয় ba
। এটি এখনও বিশেষ অবাক করার মতো নয়।
$foo = "3d8";
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
$foo++;
echo "$foo\n";
( আদর্শ )
এটি মুদ্রণ করে:
3d8
3d9
3e0
4
অন্তর্নিহিত রূপান্তরগুলি এবং অপারেটরগুলির একই স্ট্রিংয়ে ভিন্ন ভিন্ন অভিনয় করার বিপদগুলিতে স্বাগতম। (পার্ল সেই কোড ব্লকটিকে কিছুটা ভিন্নভাবে পরিচালনা করে - এটি স্থির করে যে অপারেটর প্রয়োগ করা হয় "3d8"
যখন ++
শুরু থেকে একটি সংখ্যাসূচক মান হয় এবং সরাসরি চলে যায় 4
( আইডোন )) এই আচরণটি পার্লপটিতে ভালভাবে বর্ণনা করা হয়েছে : স্বতঃবৃদ্ধি এবং স্বয়ংক্রিয় হ্রাস )
এখন, কেন একটি ভাষা এক উপায়ে কিছু করে এবং অন্যটি এটি অন্য উপায়ে ডিজাইনারদের ডিজাইন চিন্তাগুলি পায়। পার্লের দর্শন এটি করার একাধিক উপায় রয়েছে - এবং আমি এই কয়েকটি অপারেশন করার বিভিন্ন উপায় সম্পর্কে ভাবতে পারি। অন্যদিকে, পাইথনের পিইপি 20 - পাইথনের জেন বর্ণিত একটি দর্শন রয়েছে যা বলেছে (অন্যান্য জিনিসের মধ্যে) রয়েছে: "এটি করার একটি উপায় থাকতে পারে - এবং সম্ভবত একমাত্র - প্রকাশ্য উপায়" "
এই নকশার পার্থক্যগুলি বিভিন্ন ভাষায় বাড়ে। পাইথনে একটি সংখ্যার দৈর্ঘ্য পাওয়ার একটি উপায় রয়েছে। অন্তর্নিহিত রূপান্তর এই দর্শনের বিপরীতে।
সম্পর্কিত পড়া: কেন রুবি স্ট্রিং-এ ফিক্সনামের অন্তর্নিহিত রূপান্তর করে না?
perl -e 'print length(100);'
প্রিন্টস 3.