উত্তর:
একটি দৃ strongly়ভাবে টাইপ করা ভাষা এবং একটি স্ট্যাটিকালি টাইপ করা ভাষার মধ্যে পার্থক্য কী?
একটি স্ট্যাটিকালি টাইপ করা ভাষার একটি টাইপ সিস্টেম থাকে যা বাস্তবায়নের (সংকলক বা দোভাষী) সংকলন সময়ে পরীক্ষা করা হয়। টাইপ চেকটি কিছু প্রোগ্রাম প্রত্যাখ্যান করে এবং প্রোগ্রামগুলি যা চেকটি পাস করে সাধারণত কিছু গ্যারান্টি নিয়ে আসে; উদাহরণস্বরূপ, সংকলকটি ভাসমান-পয়েন্ট সংখ্যাগুলিতে পূর্ণসংখ্যার গাণিতিক নির্দেশনা ব্যবহার না করার গ্যারান্টি দেয়।
"দৃ strongly়ভাবে টাইপড" এর অর্থ সম্পর্কে সত্যিকারের কোন চুক্তি নেই, যদিও পেশাদার সাহিত্যে সর্বাধিক ব্যবহৃত সংজ্ঞাটি হ'ল "দৃ typ়ভাবে টাইপ করা" ভাষায়, প্রোগ্রামারটির পক্ষে টাইপ সিস্টেম দ্বারা আরোপিত বিধিনিষেধের আশেপাশের কাজ করা সম্ভব নয় । এই শব্দটি প্রায় সবসময়ই স্ট্যাটিক্যালি টাইপ করা ভাষাগুলি বর্ণনা করতে ব্যবহৃত হয়।
স্ট্যাটিকালি টাইপের বিপরীতটি হ'ল "ডায়নামিকালি টাইপড", যার অর্থ এটি
উদাহরণস্বরূপ, গতিশীলভাবে টাইপ করা লুয়াতে অন্যদের মধ্যে একটি স্ট্রিং টাইপ, একটি সংখ্যা টাইপ এবং বুলিয়ান টাইপ থাকে। লুয়ায় প্রতিটি মান হুবহু এক ধরণের হয় তবে গতিশীল টাইপ করা সমস্ত ভাষার জন্য এটি প্রয়োজন হয় না। লুয়ায়, দুটি স্ট্রিং সংমিশ্রণ করা জায়েয তবে এটি একটি স্ট্রিং এবং বুলিয়ানকে বোঝানো জায়েয নয়।
"দৃ strongly়ভাবে টাইপ করা" এর বিপরীতটি "দুর্বলভাবে টাইপ করা", যার অর্থ আপনি টাইপ সিস্টেমের চারপাশে কাজ করতে পারেন। সি কুখ্যাতভাবে দুর্বলভাবে টাইপ করা হয় কারণ কোনও পয়েন্টার টাইপ কেবল ingালাইয়ের মাধ্যমে অন্য কোনও পয়েন্টার টাইপের সাথে রূপান্তরিত হয়। পাস্কালটি দৃ strongly়ভাবে টাইপ করার উদ্দেশ্যে করা হয়েছিল, তবে ডিজাইনের একটি নজরদারি (অবিকৃত বৈকল্পিক রেকর্ডস) টাইপ সিস্টেমে একটি ফাঁকটি প্রবর্তন করেছিল, তাই প্রযুক্তিগতভাবে এটি দুর্বলভাবে টাইপ করা হয়। সত্যই দৃ strongly়ভাবে টাইপ করা ভাষার উদাহরণগুলির মধ্যে রয়েছে সিএলইউ, স্ট্যান্ডার্ড এমএল এবং হাস্কেল। স্ট্যান্ডার্ড এমএল প্রকৃতপক্ষে ভাষাটি বিস্তৃত করার পরে আবিষ্কার করা টাইপ সিস্টেমে লুফোলগুলি অপসারণ করতে বেশ কয়েকটি সংশোধন করেছে।
সামগ্রিকভাবে, এটি "শক্তিশালী" এবং "দুর্বল" সম্পর্কে কথা বলার মতো দরকারী না হয়ে দেখা গেছে। কোনও ধরণের সিস্টেমে লুফোল রয়েছে কিনা তার সঠিক সংখ্যা এবং প্রকৃতির তুলনায় কম গুরুত্বপূর্ণ, বাস্তবে তারা আসার সম্ভাবনা কতটা এবং লুফোলটি শোষণের পরিণতিগুলি কী। অনুশীলনে, পুরোপুরি "শক্তিশালী" এবং "দুর্বল" শব্দটি এড়ানো ভাল , কারণ এটি
অপেশাদাররা প্রায়শই তাদের "স্ট্যাটিক" এবং "গতিশীল" দিয়ে মিশ্রিত করে।
আপাতদৃষ্টিতে "দুর্বল টাইপিং" আপত্তিজনক রূপান্তরগুলির উপস্থিতি বা অনুপস্থিতি সম্পর্কে কথা বলতে কিছু লোক ব্যবহার করে।
পেশাদাররা শর্তাবলীর অর্থ কী তা নিয়ে একমত হতে পারে না।
সামগ্রিকভাবে আপনার দর্শকদের জানান বা আলোকিত করার সম্ভাবনা কম unlikely
দুঃখজনক সত্যটি হ'ল যখন সিস্টেমগুলি টাইপ করার কথা আসে, "শক্তিশালী" এবং "দুর্বল" প্রযুক্তিগত অর্থের সাথে সর্বজনীনভাবে একমত হন না। আপনি যদি টাইপ সিস্টেমগুলির আপেক্ষিক শক্তি সম্পর্কে আলোচনা করতে চান তবে গ্যারান্টি কী এবং কী সরবরাহ করা হয় নি তা নিয়ে আলোচনা করা ভাল। উদাহরণস্বরূপ, জিজ্ঞাসা করার জন্য একটি ভাল প্রশ্নটি হ'ল: "প্রদত্ত প্রকারের (বা শ্রেণি) এর প্রতিটি মানই কি সেই ধরণের কোনও কনস্ট্রাক্টরকে কল করে তৈরি করার নিশ্চয়তা দেয়?" সি তে উত্তর নেই। সিএলইউ, এফ #, এবং হাস্কেল এটি হ্যাঁ। সি ++ এর জন্য আমি নিশ্চিত নই — আমি জানতে চাই।
বিপরীতে, স্থির টাইপিং এর অর্থ হল প্রোগ্রামগুলি কার্যকর করার আগে পরীক্ষা করা হয় এবং এটি শুরু হওয়ার আগে কোনও প্রোগ্রাম প্রত্যাখ্যান করা হতে পারে। ডায়নামিক টাইপিংয়ের অর্থ হ'ল কার্যকরকরণের সময় মানগুলির প্রকারগুলি পরীক্ষা করা হয় , এবং একটি খারাপভাবে টাইপ করা অপারেশন প্রোগ্রামটি থামিয়ে দিতে পারে বা অন্যথায় রান সময় কোনও ত্রুটির সংকেত দেয়। স্ট্যাটিক টাইপিংয়ের প্রাথমিক কারণ হ'ল এমন প্রোগ্রামগুলিকে বাতিল করা যা এই জাতীয় "গতিশীল ধরণের ত্রুটি" থাকতে পারে।
একজন কি অন্যকে বোঝায়?
পেডেন্টিক স্তরে, না, কারণ "শক্তিশালী" শব্দের সত্যিকার অর্থে কোনও অর্থ নেই। তবে অনুশীলনে, লোকেরা প্রায়শই দুটি কাজের মধ্যে একটি করে:
তারা (ভুলভাবে) "স্ট্যাটিক" এবং "ডায়নামিক" বোঝাতে "শক্তিশালী" এবং "দুর্বল" ব্যবহার করে, সেক্ষেত্রে তারা (ভুলভাবে) "দৃ strongly়ভাবে টাইপড" এবং "স্ট্যাটিকালি টাইপড" ইন্টারচেঞ্জযোগ্যভাবে ব্যবহার করছে।
স্ট্যাটিক টাইপ সিস্টেমগুলির বৈশিষ্ট্যের তুলনায় তারা "শক্তিশালী" এবং "দুর্বল" ব্যবহার করে। কেউ "শক্তিশালী" বা "দুর্বল" গতিশীল টাইপ সিস্টেমের বিষয়ে কথা শুনে খুব বিরল। ফোরথ ব্যতীত, যার আসলে কোনও ধরণের সিস্টেম নেই, আমি গতিশীল টাইপ করা ভাষাটি ভাবতে পারি না যেখানে টাইপ সিস্টেমটি বিভক্ত করা যায়। সংজ্ঞা অনুসারে বাছাই করুন, এই চেকগুলি এক্সিকিউশন ইঞ্জিনের মধ্যে বুলি রয়েছে এবং প্রতিটি ক্রিয়াকলাপ কার্যকর হওয়ার আগে স্যানিটি পরীক্ষা করে।
যে কোনও উপায়ে, কোনও ব্যক্তি যদি কোনও ভাষা "দৃ strongly়ভাবে টাইপড" বলে থাকেন, তবে সেই ব্যক্তি সম্ভবত একটি স্ট্যাটিক্যালি টাইপ করা ভাষা সম্পর্কে কথা বলছেন।
এটি প্রায়শই ভুল বোঝাবুঝি হয় তাই এটি পরিষ্কার করে দেওয়া যাক।
স্ট্যাটিক টাইপিং যেখানে টাইপটি সংযুক্ত থাকে ভেরিয়েবলের সাথে । প্রকারগুলি সংকলনের সময় পরীক্ষা করা হয়।
গতিশীল টাইপিং হ'ল টাইপটি মানটির সাথে আবদ্ধ । প্রকারগুলি রানের সময় পরীক্ষা করা হয়।
জাভাতে উদাহরণস্বরূপ:
String s = "abcd";
s
"সব সময় প্রবেশ করুন" একটি হতে হবে String
। তার জীবনের সময় এটি বিভিন্ন দিকে নির্দেশ করতে পারে String
(যেহেতু s
জাভাতে একটি উল্লেখ)। এটির একটি null
মান থাকতে পারে তবে এটি কখনই উল্লেখ করে নাInteger
বাList
। এটা স্থির টাইপিং।
পিএইচপি-তে:
$s = "abcd"; // $s is a string
$s = 123; // $s is now an integer
$s = array(1, 2, 3); // $s is now an array
$s = new DOMDocument; // $s is an instance of the DOMDocument class
এটি ডায়নামিক টাইপিং।
(সতর্কতা সম্পাদনা করুন!)
স্ট্রং টাইপিং এমন একটি বাক্যাংশ যা অর্থের সাথে একমত হয় না। স্থির টাইপিং ব্যতীত অন্য কিছু বোঝাতে এই শব্দটি ব্যবহার করে এমন বেশিরভাগ প্রোগ্রামাররা এটি বোঝাতে ব্যবহার করে যে এখানে একটি ধরণের শৃঙ্খলা রয়েছে যা সংকলক দ্বারা প্রয়োগ করা হয়েছে। উদাহরণস্বরূপ, সিএলইউতে একটি শক্তিশালী টাইপ সিস্টেম রয়েছে যা ক্লায়েন্ট কোডকে প্রকারটি সরবরাহকারী কনস্ট্রাক্টরগুলি ব্যবহার না করে বিমূর্ত প্রকারের মান তৈরি করতে দেয় না to সিতে কিছুটা শক্তিশালী টাইপ সিস্টেম থাকে তবে এটি একটি ডিগ্রীতে "বিপর্যস্ত" হতে পারে কারণ একটি প্রোগ্রাম সর্বদা একটি পয়েন্টার ধরণের মানটিকে অন্য পয়েন্টার ধরণের মান হিসাবে ফেলে দিতে পারে। সুতরাং উদাহরণস্বরূপ, সিতে আপনি ফিরে আসা কোনও মানটি নিতে পারেন malloc()
এবং আনন্দের সাথে এটিকে নিক্ষেপ করতে পারেনFILE*
এবং সংকলক আপনাকে থামানোর চেষ্টা করবে না — এমনকি আপনাকে সতর্ক করেও যে আপনি কোনও অদ্ভুত কিছু করছেন।
(মূল উত্তরটি "রান সময়ে টাইপ পরিবর্তন না করা" সম্পর্কে একটি মান সম্পর্কে কিছু বলেছিল। আমি অনেক ভাষা ডিজাইনার এবং সংকলক লেখককে জানি এবং রান টাইমে মান পরিবর্তনের ধরন সম্পর্কে কথা বলে এমন একজনকে আমি চিনি না, সম্ভবত কিছু অতি উন্নত গবেষণা ব্যতিরেকে সিস্টেম, যেখানে এটি "শক্তিশালী আপডেট সমস্যা" হিসাবে পরিচিত)
দুর্বল টাইপিং থেকে বোঝা যায় যে সংকলক একটি টাইপিং ডিসপ্লাইন প্রয়োগ করে না, বা সম্ভবত বাস্তবায়ন সহজেই বিমুখ করা যেতে পারে।
এই উত্তরের মূলটি অন্তর্নিহিত রূপান্তর (কখনও কখনও "অন্তর্ভুক্ত প্রচার" নামেও ডাকা হয়) সহ দুর্বল টাইপিংয়ের সাথে জটিল । উদাহরণস্বরূপ, জাভাতে:
String s = "abc" + 123; // "abc123";
এই কোডটি অন্তর্নিহিত প্রচারের একটি উদাহরণ: 123 সহ্য করার আগে স্পষ্টভাবে একটি স্ট্রিংয়ে রূপান্তরিত হয় "abc"
। এটি যুক্তিযুক্ত হতে পারে জাভা সংকলক সেই কোডটি আবার লিখে দেয়:
String s = "abc" + new Integer(123).toString();
একটি ক্লাসিক পিএইচপি বিবেচনা করুন "সমস্যার সাথে শুরু করে":
if (strpos('abcdef', 'abc') == false) {
// not found
}
এখানে ত্রুটিটি হ'ল strpos()
ম্যাচের সূচকটি ফিরিয়ে দেয়, ০.০ হচ্ছে বুলিয়ানকে জোর করা false
হয় এবং সুতরাং শর্তটি আসলে সত্য। অন্তর্নিহিত রূপান্তর এড়ানোর ===
পরিবর্তে সমাধানটি ব্যবহার করা ==
।
এই উদাহরণটি ব্যাখ্যা করে যে কীভাবে অন্তর্ভুক্ত রূপান্তর এবং গতিশীল টাইপিংয়ের সংমিশ্রণ প্রোগ্রামারগুলিকে বিপথগামী করতে পারে।
রুবির সাথে এর তুলনা করুন:
val = "abc" + 123
যা একটি রানটাইম ত্রুটি কারণ রুবিতে 123 অবজেক্টটি কেবল স্পষ্টভাবে রূপান্তরিত হয় না কারণ এটি কোনও +
পদ্ধতিতে পাস করার ঘটনা ঘটে । রুবিতে প্রোগ্রামারকে অবশ্যই রূপান্তরটি সুস্পষ্ট করতে হবে:
val = "abc" + 123.to_s
পিএইচপি এবং রুবীর তুলনা করা এখানে একটি ভাল চিত্র। দুটিই গতিময়ভাবে টাইপ করা ভাষা তবে পিএইচপি-তে প্রচুর অন্তর্নিহিত রূপান্তর রয়েছে এবং রুবি (সম্ভবত অবাক হলেও আপনি যদি এটির সাথে পরিচিত না হন) doesn't
এখানে বক্তব্যটি হ'ল স্থির / গতিশীল অক্ষগুলি শক্তিশালী / দুর্বল অক্ষের থেকে পৃথক। লোকেরা সম্ভবত তাদের কিছুটা বিভ্রান্ত করে কারণ শক্তিশালী বনাম দুর্বল টাইপিং কেবল কম স্পষ্টভাবে সংজ্ঞায়িত হয় না, শক্তিশালী এবং দুর্বল বলতে কী বোঝায় তা নিয়ে সত্যিকারের sensক্যমত্য নেই। এই কারণে দৃ /় / দুর্বল টাইপিং কালো বা সাদাের চেয়ে ধূসর রঙের শেডের চেয়ে অনেক বেশি।
সুতরাং আপনার প্রশ্নের উত্তর দিতে: এটি দেখার বেশিরভাগ উপায় যা বেশিরভাগই সঠিক বলে হ'ল স্ট্যাটিক টাইপিং হ'ল সংকলন-টাইপ টাইপ সুরক্ষা এবং শক্ত টাইপিংটি রানটাইম টাইপ সুরক্ষা।
এর কারণ হ'ল স্থিতভাবে টাইপ করা ভাষায় ভেরিয়েবলগুলির একটি প্রকার থাকে যা অবশ্যই ঘোষণা করতে হবে এবং সংকলনের সময় পরীক্ষা করা যায়। একটি দৃ strongly়-টাইপিত ভাষার মান রয়েছে যা রান টাইমে টাইপ করে এবং প্রোগ্রামারটির পক্ষে গতিশীল চেক ছাড়াই টাইপ সিস্টেমটিকে বিকৃত করা কঠিন।
তবে এটি বোঝা গুরুত্বপূর্ণ যে কোনও ভাষা স্ট্যাটিক / স্ট্রং, স্ট্যাটিক / দুর্বল, ডায়নামিক / স্ট্রং বা ডায়নামিক / দুর্বল হতে পারে।
"abc" + 123
একটি রানটাইম ত্রুটি, রুবিতে একটি সংকলন ত্রুটি নয়। এটি একটি সংকলন ত্রুটি হলে রুবি স্থিরভাবে টাইপ করা হত।
উভয়ই দুটি ভিন্ন অক্ষের খুঁটি:
শক্তভাবে টাইপ করা মানে, একটি স্বয়ংক্রিয়ভাবে এক থেকে অন্য ধরণের রূপান্তরিত হবে না। স্বাস্থ্যহীন টাইপ বিপরীত: পার্ল একটি স্ট্রিং মত ব্যবহার করতে পারেন "123"
স্বয়ংক্রিয়ভাবে int- এ সেটিকে রূপান্তর দ্বারা, একটি সাংখ্যিক প্রেক্ষাপটে 123
। পাইথনের মতো দৃ strongly়ভাবে টাইপিত ভাষা এটি করবে না।
স্ট্যাটিকালি টাইপ করা মানে, সংকলক সংকলন সময়ে প্রতিটি ভেরিয়েবলের প্রকারটি বের করে। গতিময়ভাবে টাইপ করা ভাষাগুলি রানটাইমের সময় কেবলমাত্র ভেরিয়েবলের প্রকারগুলি খুঁজে বের করে।
শক্তভাবে টাইপ করা মানে ধরণের মধ্যে রূপান্তরগুলির মধ্যে বিধিনিষেধ রয়েছে। স্ট্যাটিকালি টাইপ করা মানে এই যে প্রকারগুলি গতিশীল নয় - আপনি একবার ভেরিয়েবল তৈরির পরে এটি পরিবর্তন করতে পারবেন না।
ডেটা কোর্সিওনের অর্থ অগত্যা দুর্বলভাবে টাইপ করা উচিত নয় কারণ কখনও কখনও এর সিনট্যাকাল চিনি:
জাভা উপরের উদাহরণটি দুর্বলতার কারণে টাইপ করা হচ্ছে
String s = "abc" + 123;
দুর্বলভাবে টাইপ করা উদাহরণ নয় কারণ এটি সত্যই করছে:
String s = "abc" + new Integer(123).toString()
আপনি যদি কোনও নতুন অবজেক্ট তৈরি করে থাকেন তবে ডেটা জবরদস্তিও দুর্বলভাবে টাইপ করা হয় না। দুর্বলভাবে টাইপ করা জাভা একটি খুব খারাপ উদাহরণ (এবং কোনও ভাষা যার ভাল প্রতিচ্ছবি রয়েছে সম্ভবত দুর্বলভাবে টাইপ করা হবে না)। কারণ ভাষার রানটাইম সর্বদা জানে যে প্রকারটি কী (ব্যতিক্রম দেশীয় প্রকারের হতে পারে)।
এটি সি এর থেকে আলাদা নয় দুর্বলভাবে টাইপের সেরা উদাহরণ সি। রানটাইমটির কোনও ধারণা নেই 4 বাইট যদি একটি পূর্ণসংখ্যা, কাঠামো, পয়েন্টার বা 4 টি অক্ষর হয়।
ভাষার রানটাইমটি সত্যই সংজ্ঞায়িত করে যে এটি দুর্বলভাবে টাইপ করা হয়েছে কি না অন্যথায় এর সত্যই ন্যায়বিচার।
সম্পাদনা: পরবর্তী চিন্তা করার পরে এটি অগত্যা সত্য নয় কারণ রানটাইমটি স্ট্রংলি টাইপড সিস্টেম হওয়ার জন্য রানটাইম সিস্টেমে সমস্ত ধরণের পুনরায় সংশোধন করতে হয় না। হাস্কেল এবং এমএলের এমন সম্পূর্ণ স্থিতিশীল বিশ্লেষণ রয়েছে যে তারা রানটাইম থেকে সম্ভাব্য প্রকারের তথ্য বাদ দিতে পারে।
উত্তর ইতিমধ্যে উপরে দেওয়া হয়েছে। শক্তিশালী বনাম সপ্তাহ এবং স্থির বনাম গতিশীল ধারণার মধ্যে পার্থক্য করার চেষ্টা করা।
শক্তভাবে টাইপ করা: স্বয়ংক্রিয়ভাবে এক ধরণের থেকে অন্য ধরণের রূপান্তরিত হবে না
গো বা পাইথনে দৃ strongly়ভাবে টাইপ করা ভাষাগুলির মতো "2" + 8 একটি ধরণের ত্রুটি বাড়িয়ে তুলবে, কারণ তারা "টাইপ জবরদস্তি" দেয় না।
দুর্বল (lyিলে )ালাভাবে) টাইপ করা হয়েছে: স্বয়ংক্রিয়ভাবে এক ধরণের অন্যটিতে রূপান্তরিত হবে: জাভাস্ক্রিপ্ট বা পার্লের মতো দুর্বলভাবে টাইপ করা ভাষাগুলি কোনও ত্রুটি ফেলবে না এবং এই ক্ষেত্রে জাভাস্ক্রিপ্টের ফলাফল হবে '28' এবং পার্লের ফলাফল হবে 10।
পার্ল উদাহরণ:
my $a = "2" + 8;
print $a,"\n";
এটিকে মেইন.পিএল এ সংরক্ষণ করুন এবং রান করুন perl main.pl
এবং আপনি আউটপুট 10 পাবেন।
প্রোগ্রামিংয়ে প্রোগ্রামার স্থিতিশীল টাইপিং এবং গতিশীল টাইপিংয়ের যে বিন্দুতে ভেরিয়েবল প্রকারগুলি পরীক্ষা করা হয় তার সাথে সম্মতি দেয়। স্ট্যাটিক টাইপ করা ভাষাগুলি হ'ল সংকলন সময়ে টাইপ চেকিং করা হয়, অন্যদিকে ডায়নামিক টাইপ করা ভাষাগুলি হ'ল টাইপ চেকিং রান-টাইমে করা হয়।
এর অর্থ কী?
Go এ এটি রান-টাইমের আগে টাইপ করা চেকগুলি (স্ট্যাটিক চেক)। এর অর্থ এটি কেবল সম্পাদিত কোডটি অনুবাদ এবং টাইপ-চেকগুলিই নয়, কোডটি চালানোর আগে এটি সমস্ত কোড এবং টাইপ ত্রুটির মাধ্যমে স্ক্যান করবে be উদাহরণ স্বরূপ,
package main
import "fmt"
func foo(a int) {
if (a > 0) {
fmt.Println("I am feeling lucky (maybe).")
} else {
fmt.Println("2" + 8)
}
}
func main() {
foo(2)
}
এই ফাইলটি মেইন.গো এ সংরক্ষণ করুন এবং এটি চালান, আপনি এর জন্য সংকলন ব্যর্থ বার্তা পাবেন।
go run main.go
# command-line-arguments
./main.go:9:25: cannot convert "2" (type untyped string) to type int
./main.go:9:25: invalid operation: "2" + 8 (mismatched types string and int)
তবে পাইথনের ক্ষেত্রে এই মামলাটি বৈধ নয়। উদাহরণস্বরূপ নিম্নলিখিত কোডের ব্লকটি প্রথম foo (2) কলের জন্য কার্যকর হবে এবং দ্বিতীয় foo (0) কলের জন্য ব্যর্থ হবে। এটি কারণ পাইথনটি গতিশীলভাবে টাইপ করা হয়, এটি কেবল এটির সম্পাদনা করে কোডটি অনুবাদ করে টাইপ-চেক করে। অন্য ব্লক foo (2) এর জন্য কখনই কার্যকর করে না, সুতরাং "2" + 8 কখনও দেখেনি এবং foo (0) কলের জন্য এটি সেই ব্লকটি কার্যকর করার চেষ্টা করবে এবং ব্যর্থ হয়েছে।
def foo(a):
if a > 0:
print 'I am feeling lucky.'
else:
print "2" + 8
foo(2)
foo(0)
আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন
python main.py
I am feeling lucky.
Traceback (most recent call last):
File "pyth.py", line 7, in <module>
foo(0)
File "pyth.py", line 5, in foo
print "2" + 8
TypeError: cannot concatenate 'str' and 'int' objects
একটি অন্যকে বোঝায় না। কোনও ভাষা স্থিতিশীল হওয়ার জন্য টাইপ করার জন্য এর অর্থ হ'ল সংকলনের সময় সমস্ত ভেরিয়েবলের প্রকারগুলি জানা বা অনুমান করা হয়।
একটি দৃ strongly ়ভাবে টাইপ করা ভাষা আপনাকে এক প্রকারের অন্য হিসাবে ব্যবহার করতে দেয় না। সি একটি দুর্বলভাবে টাইপ করা ভাষা এবং দৃ strongly়ভাবে টাইপ করা ভাষাগুলি যা মঞ্জুরি দেয় না তার একটি উত্তম উদাহরণ। সিতে আপনি ভুল টাইপের একটি ডেটা উপাদান পাস করতে পারেন এবং এটি অভিযোগ করবে না। প্রবলভাবে টাইপ করা ভাষায় আপনি পারবেন না।
শক্তিশালী টাইপিংয়ের সম্ভবত সম্ভবত ভ্যারিয়েবলগুলির একটি সু-সংজ্ঞায়িত টাইপ থাকে এবং এক্সপ্রেশনগুলিতে বিভিন্ন ধরণের ভেরিয়েবলগুলি একত্রিত করার বিষয়ে কঠোর নিয়ম রয়েছে। উদাহরণস্বরূপ, যদি A একটি পূর্ণসংখ্যা এবং বি একটি ফ্লোট হয়, তবে A + B সম্পর্কে কঠোর নিয়মটি হতে পারে যে এটিকে একটি ফ্লোটে ফেলে দেওয়া হয় এবং ফলটি ফ্লোট হিসাবে ফিরে আসে। যদি A একটি পূর্ণসংখ্যা এবং বি একটি স্ট্রিং হয় তবে কঠোর নিয়ম হতে পারে যে A + B বৈধ নয়।
স্ট্যাটিক টাইপিংয়ের সম্ভবত সম্ভবত টাইপগুলি সংকলন সময়ে নির্ধারিত হয় (বা এটি সংকলিত ভাষার জন্য সমতুল্য) এবং প্রোগ্রামের সম্পাদনার সময় পরিবর্তন করতে পারে না।
নোট করুন যে এই শ্রেণিবিন্যাসগুলি পারস্পরিক একচেটিয়া নয়, প্রকৃতপক্ষে আমি তাদের ঘন ঘন একসাথে হওয়ার প্রত্যাশা করব। অনেক দৃ strongly়ভাবে টাইপ করা ভাষাও স্ট্যাটিকালি টাইপ করা হয়।
এবং মনে রাখবেন যে আমি যখন 'সম্ভবত' শব্দটি ব্যবহার করি তখন এটি হয় কারণ এই শর্তগুলির কোনও সর্বজনীনভাবে গৃহীত সংজ্ঞা নেই। আপনি ইতিমধ্যে উত্তর থেকে ইতিমধ্যে দেখতে পাবেন।