আমি অনেক শুনেছি যে নতুন প্রোগ্রামিং ভাষা গতিশীলভাবে টাইপ করা হয় তবে যখন আমরা বলি যে কোন ভাষা গতিশীলভাবে বনাম টাইপ করা হয় তাত্ক্ষণিকভাবে টাইপ করা হয় তখন এর অর্থ কী?
আমি অনেক শুনেছি যে নতুন প্রোগ্রামিং ভাষা গতিশীলভাবে টাইপ করা হয় তবে যখন আমরা বলি যে কোন ভাষা গতিশীলভাবে বনাম টাইপ করা হয় তাত্ক্ষণিকভাবে টাইপ করা হয় তখন এর অর্থ কী?
উত্তর:
একটি ভাষা স্থিতিশীলভাবে টাইপ করা হয় যদি কোনও চলকের ধরণটি সংকলন সময়ে জানা যায়। কিছু ভাষার জন্য এটির অর্থ হ'ল প্রোগ্রামার হিসাবে আপনাকে অবশ্যই প্রতিটি ভেরিয়েবলের প্রকারটি নির্দিষ্ট করতে হবে (যেমন: জাভা, সি, সি ++); অন্যান্য ভাষাগুলি কিছু প্রকারের অনুক্রমের প্রস্তাব দেয়, একটি ভেরিয়েবলের ধরণটি টাইপ সিস্টেমের সক্ষমতা (যেমন: ওক্যামল, হাস্কেল, স্কালা, কোটলিন)
এখানে মূল সুবিধাটি হ'ল কম্পাইলার দ্বারা সমস্ত ধরণের চেকিং করা যেতে পারে এবং অতএব প্রচুর তুচ্ছ বাগগুলি খুব প্রাথমিক পর্যায়ে ধরা পড়ে।
উদাহরণ: সি, সি ++, জাভা, মরিচা, গো, স্কালা
কোনও ভাষা গতিশীলভাবে টাইপ করা হয় যদি টাইপটি রান-টাইম মানগুলির সাথে সম্পর্কিত হয়, এবং নামগুলি ভেরিয়েবল / ক্ষেত্র / ইত্যাদি নয়। এর অর্থ হ'ল আপনি প্রোগ্রামার হিসাবে কিছুটা দ্রুত লিখতে পারেন কারণ আপনাকে প্রতিবার প্রকার নির্দিষ্ট করতে হবে না ( ধরণের সূত্রের সাথে স্ট্যাটিকালি-টাইপ করা ভাষা ব্যবহার না করা )।
উদাহরণ: পার্ল, রুবি, পাইথন, পিএইচপি, জাভাস্ক্রিপ্ট
যে কোনও উপায়ে স্থিতিশীল টাইপ-চেকিংয়ের জন্য কোনও সংকলক নেই বলে বেশিরভাগ স্ক্রিপ্টিং ভাষার এই বৈশিষ্ট্যটি রয়েছে তবে আপনি নিজেকে একটি বাগের সন্ধান করতে পারেন যা দোভাষী দ্বারা একটি ভেরিয়েবলের ধরণের ব্যাখ্যা করার কারণে হয় is ভাগ্যক্রমে, স্ক্রিপ্টগুলি ছোট হতে থাকে তাই বাগগুলিতে লুকানোর মতো অনেক জায়গা নেই।
বেশিরভাগ গতিশীল টাইপ করা ভাষা আপনাকে টাইপ তথ্য সরবরাহ করতে দেয় তবে এটির প্রয়োজন হয় না। বর্তমানে একটি ভাষা যা বিকশিত হচ্ছে, রসাল , একটি হাইব্রিড পদ্ধতির গ্রহণ করে ফাংশনগুলির মধ্যে ডায়নামিক টাইপিংয়ের অনুমতি দেয় তবে ফাংশনের স্বাক্ষরের জন্য স্ট্যাটিক টাইপিং প্রয়োগ করে।
স্ট্যাটিকালি টাইপ করা প্রোগ্রামিং ল্যাংগুয়েজগুলি রান- টাইমের বিপরীতে সংকলন সময়ে টাইপ চেকিং (অর্থাত্ ধরণের সীমাবদ্ধতা যাচাই ও প্রয়োগের প্রক্রিয়া) করে ।
গতিযুক্ত টাইপ করা প্রোগ্রামিং ভাষা সংকলন-সময়ের বিপরীতে রান-টাইমে টাইপ চেকিং করে ।
স্ট্যাটিকালি টাইপ করা ভাষার উদাহরণগুলি: - জাভা, সি, সি ++
গতিশীলভাবে টাইপ করা ভাষার উদাহরণগুলি: - পার্ল, রুবি, পাইথন, পিএইচপি, জাভাস্ক্রিপ্ট
পাইথন (ডায়নামিকভাবে টাইপ করা) এবং গো (স্ট্যাটিকালি টাইপ করা) টাইপ ত্রুটিটি কীভাবে পরিচালনা করে তার বিপরীতে এখানে একটি উদাহরণ রয়েছে:
def silly(a):
if a > 0:
print 'Hi'
else:
print 5 + '3'
পাইথন রান সময় পরীক্ষা করে টাইপ করে এবং তাই:
silly(2)
পুরোপুরি জরিমানা চালায় এবং প্রত্যাশিত আউটপুট উত্পাদন করে Hi
। সমস্যাযুক্ত লাইনটি আঘাত করলেই ত্রুটি উত্থাপিত হয়:
silly(-1)
উত্পাদন
TypeError: unsupported operand type(s) for +: 'int' and 'str'
কারণ সম্পর্কিত লাইনটি আসলে কার্যকর হয়েছিল।
অন্যদিকে যান সংকলনের সময় টাইপ-চেকিং করে:
package main
import ("fmt"
)
func silly(a int) {
if (a > 0) {
fmt.Println("Hi")
} else {
fmt.Println("3" + 5)
}
}
func main() {
silly(2)
}
নিম্নলিখিত ত্রুটি সহ উপরেরগুলি সংকলন করবে না:
invalid operation: "3" + 5 (mismatched types string and int)
runhaskell
উদাহরণস্বরূপ, হাস্কেলের সাথে ব্যাখ্যা করা যেতে পারে ।
সহজভাবে এটি এইভাবে রাখুন: একটি স্ট্যাটিকালি টাইপ করা ভাষা ভেরিয়েবলের প্রকারগুলি স্থির থাকে , মানে একবার আপনি কোনও ভেরিয়েবলটি কোনও প্রকারে সেট করে নিলে আপনি এটি পরিবর্তন করতে পারবেন না। এটি কারণ টাইপিং ভেরিয়েবলের সাথে সম্পর্কিত মানটির পরিবর্তে সম্পর্কিত হয়।
জাভাতে উদাহরণস্বরূপ:
String str = "Hello"; //variable str statically typed as string
str = 5; //would throw an error since str is supposed to be a string only
অন্যদিকে যেখানে: গতিশীলভাবে টাইপিত ভাষা ভেরিয়েবলের প্রকারগুলি গতিশীল , অর্থাত্ আপনি কোনও প্রকারে ভেরিয়েবল সেট করার পরে আপনি এটি পরিবর্তন করতে পারেন। এটি কারণ ভেরিয়েবলের পরিবর্তে টাইপিং এটির মানটির সাথে যুক্ত যা এটি ধরে নেয়।
পাইথনে উদাহরণস্বরূপ:
str = "Hello" # variable str is linked to a string value
str = 5 # now it is linked to an integer value; perfectly OK
সুতরাং, টাইপ করা মানগুলিকে কেবল জেনেরিক পয়েন্টার হিসাবে গতিশীল টাইপ করা ভাষাগুলিতে ভেরিয়েবলগুলি ভাবা ভাল ।
সংক্ষিপ্তসার হিসাবে, ভাষার পরিবর্তে ভাষার পরিবর্তে (বা বর্ণিত হওয়া উচিত) টাইপ করুন । এটি স্ট্যাটিক্যালি টাইপড ভেরিয়েবলগুলির ভাষা হিসাবে আরও ভাল ব্যবহার করা যেতে পারে টাইপড ভেরিয়েবল আইএমএইচও-র একটি ভাষা বনাম ।
পরিসংখ্যান অনুসারে টাইপ করা ভাষাগুলি সাধারণত সংকলিত ভাষা হয়, সুতরাং, সংকলকগুলি প্রকারগুলি পরীক্ষা করে (সঠিকভাবে বোঝায় সঠিক? কারণ পরে রান টাইমে পরিবর্তিত হওয়ার অনুমতি নেই)।
ডায়নামিকালি টাইপ করা ভাষাগুলি সাধারণত ব্যাখ্যা করা হয়, সুতরাং ব্যবহারের সময় টাইপ চেকিং (যদি থাকে) রান টাইমে ঘটে। অবশ্যই এটি কিছু কর্মক্ষমতা ব্যয় করে, এবং গতিশীল ভাষাগুলি (যেমন, পাইথন, রুবি, পিএইচপি) টাইপযুক্ত (জাভা, সি # ইত্যাদি) হিসাবে ভাল স্কেল না করার অন্যতম কারণ। অন্য দৃষ্টিকোণ থেকে, স্ট্যাটিকালি টাইপ করা ভাষাগুলিতে একটি প্রারম্ভকালীন ব্যয় বেশি থাকে: সাধারণত আপনি আরও কোড লিখেন, আরও কঠোর কোড। তবে তা পরে ছাড় দেয়।
ভাল জিনিস উভয় পক্ষের অন্য পক্ষ থেকে বৈশিষ্ট্য ধার করা হয়। টাইপ করা ভাষাগুলি আরও গতিশীল বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করছে, উদাহরণস্বরূপ, জেনেরিকস এবং গতিশীল লাইব্রেরি সি # তে, এবং গতিশীল ভাষাগুলিতে আরও টাইপ চেকিং অন্তর্ভুক্ত রয়েছে, উদাহরণস্বরূপ, পাইথনে এনোটেশন টাইপ করুন, বা পিএইচপি-র হ্যাক বৈকল্পিক, যা সাধারণত ভাষার মূল হয় না এবং ব্যবহারযোগ্য হয় on দাবী করছি।
প্রযুক্তি নির্বাচনের বিষয়টি যখন আসে তখন কোনও পক্ষেরই অপরটির চেয়ে স্বতন্ত্র শ্রেষ্ঠত্ব থাকে না। আপনি আরও নিয়ন্ত্রণ শুরু করতে চান বা নমনীয়তার পক্ষে এটি কেবল পছন্দের বিষয়। কাজের জন্য কেবল সঠিক সরঞ্জামটি বেছে নিন এবং একটি স্যুইচ বিবেচনা করার আগে বিপরীত দিক থেকে কী পাওয়া যায় তা পরীক্ষা করে দেখুন।
http://en.wikipedia.org/wiki/Type_system
স্ট্যাটিক টাইপিং
একটি প্রোগ্রামিং ল্যাঙ্গুয়েজটি রান-টাইমের বিপরীতে কম্পাইল-টাইমে যখন টাইপ চেকিং করা হয় তখন স্ট্যাটিক টাইপিং ব্যবহার করার কথা বলে। স্ট্যাটিক টাইপিংয়ে টাইপগুলি ভেরিয়েবলের সাথে মানগুলির সাথে যুক্ত হয়। স্ট্যাটিকালি টাইপ করা ভাষাগুলির মধ্যে অ্যাডা, সি, সি ++, সি #, জ্যাডি, জাভা, ফোর্টরান, হাস্কেল, এমএল, পাস্কাল, পার্ল (স্কেলার, অ্যারে, হ্যাশ এবং সাবরুটাইনগুলির পার্থক্য সহ) এবং স্কালা অন্তর্ভুক্ত রয়েছে। স্ট্যাটিক টাইপিং প্রোগ্রাম যাচাইকরণের একটি সীমাবদ্ধ ফর্ম (প্রকারের সুরক্ষা দেখুন): তদনুসারে, এটি বিকাশের চক্রের প্রথম দিকে অনেক ধরণের ত্রুটি ধরা দেয় allows স্থিতিশীল প্রকারের চেকারগণ কেবল প্রকারের তথ্যগুলি যা সংকলনের সময় নির্ধারণ করা যায় তা মূল্যায়ন করে, তবে যাচাই করা শর্তাদি প্রোগ্রামের সমস্ত সম্ভাব্য সম্পাদনের জন্য রয়েছে তা যাচাই করতে সক্ষম হয়, যা প্রতিবার প্রোগ্রামটি সম্পাদন করার সময় টাইপ চেকগুলি পুনরাবৃত্তি করার প্রয়োজনীয়তা দূর করে। রানটাইম টাইপ চেক বাদ দিয়ে এবং অন্যান্য অপ্টিমাইজেশান সক্ষম করে প্রোগ্রাম কার্যকরকরণকে আরও দক্ষ (যেমন দ্রুত বা হ্রাস করা স্মৃতি গ্রহণ) করা যায়।
কারণ তারা সংকলনের সময় প্রকারের তথ্যের মূল্যায়ন করে এবং তাই টাইপ তথ্যের অভাব যা কেবল রান-টাইমে পাওয়া যায়, স্ট্যাটিক ধরণের চেকারগুলি রক্ষণশীল। তারা এমন কিছু প্রোগ্রাম প্রত্যাখ্যান করবে যা রান-টাইমে ভাল আচরণ করা হতে পারে, তবে এটি ভাল-টাইপের জন্য স্থিতিশীলভাবে নির্ধারণ করা যায় না। উদাহরণস্বরূপ, এমনকি যদি কোনও অভিব্যক্তি সর্বদা রান-টাইমে সত্যকে মূল্যায়ন করে তবে কোড সহ একটি প্রোগ্রাম
if <complex test> then 42 else <type error>
দুর্বল টাইপযুক্ত হিসাবে প্রত্যাখাত হবে, কারণ একটি স্থির বিশ্লেষণ নির্ধারণ করতে পারে না যে অন্য শাখা নেওয়া হবে না। [1] স্থির প্রকারের চেকারগুলির রক্ষণশীল আচরণ সুবিধাজনক যখন মিথ্যাটিকে খুব কম মূল্যায়ণ করা হয়: স্ট্যাটিক প্রকারের পরীক্ষক খুব কম ব্যবহৃত কোড পাথগুলিতে টাইপ ত্রুটিগুলি সনাক্ত করতে পারে। স্ট্যাটিক টাইপ চেকিং ছাড়াই, 100% কোড কভারেজ সহ কোড কভারেজ পরীক্ষাগুলিও এই ধরণের ত্রুটি খুঁজে পেতে পারে না। কোড কভারেজ পরীক্ষাগুলি এই ধরণের ত্রুটিগুলি সনাক্ত করতে ব্যর্থ হতে পারে কারণ যেখানে মানগুলি তৈরি করা হয় এবং যেখানে নির্দিষ্ট মান ব্যবহার করা হয় সে সব জায়গাগুলির সংমিশ্রণ অবশ্যই বিবেচনায় নেওয়া উচিত।
সর্বাধিক ব্যবহৃত স্ট্যাটিক্যালি টাইপ করা ভাষাগুলি আনুষ্ঠানিকভাবে নিরাপদ নয়। তাদের কাছে প্রোগ্রামিং ল্যাঙ্গুয়েজ স্পেসিফিকেশনে "লুফোলস" রয়েছে যা প্রোগ্রামারদের কোড লিখতে সক্ষম করে যা একটি স্ট্যাটিক টাইপ চেকার দ্বারা সম্পাদিত যাচাইকরণকে বাতিল করে দেয় এবং তাই সমস্যার বিস্তৃত পরিসীমা সমাধান করে। উদাহরণস্বরূপ, জাভা এবং বেশিরভাগ সি-স্টাইলের ভাষায় টাইপ পেনিং রয়েছে এবং হাস্কেলের যেমন অনিরাপদ পারফর্মফর্মআইও রয়েছে: এই ধরনের ক্রিয়াকলাপ রানটাইমগুলিতে অনিরাপদ হতে পারে, যাতে প্রোগ্রামটি চলাকালীন ভুল মানের টাইপিংয়ের কারণে তারা অযাচিত আচরণের কারণ হতে পারে।
গতিশীল টাইপিং
একটি প্রোগ্রামিং ভাষা গতিশীল টাইপ করা হয়, বা কেবল 'গতিশীল' বলা হয়, যখন বেশিরভাগ ধরণের চেকিং রান-টাইমে সংকলন-সময়ের বিপরীতে সঞ্চালিত হয়। গতিশীল টাইপিংয়ে, প্রকারগুলি ভেরিয়েবলের সাথে মানগুলির সাথে যুক্ত। গতিময়ভাবে টাইপ করা ভাষাগুলির মধ্যে গ্রোভি, জাভাস্ক্রিপ্ট, লিস্প, লুয়া, অবজেক্টিভ সি, পার্ল (ব্যবহারকারী-সংজ্ঞায়িত প্রকারের ক্ষেত্রে তবে অন্তর্নির্মিত প্রকারের ক্ষেত্রে নয়), পিএইচপি, প্রোলজ, পাইথন, রুবি, স্মলটালক এবং টিসিএল অন্তর্ভুক্ত রয়েছে। স্ট্যাটিক টাইপিংয়ের সাথে তুলনা করে, ডায়নামিক টাইপিং আরও নমনীয় হতে পারে (যেমন প্রোগ্রামগুলি রান-টাইম ডেটার উপর ভিত্তি করে টাইপ এবং কার্যকারিতা তৈরি করার অনুমতি দিয়ে), যদিও ব্যয় কম অগ্রাধিকারের গ্যারান্টি দিয়ে। এটি কারণ কারণ একটি গতিশীলভাবে টাইপ করা ভাষা কিছু প্রোগ্রাম গ্রহণ করে এবং কার্যকর করার চেষ্টা করে যা কোনও স্ট্যাটিক ধরণের পরীক্ষক দ্বারা অবৈধ হিসাবে বিবেচিত হতে পারে।
ডায়নামিক টাইপিংয়ের ফলে রানটাইম টাইপ ত্রুটি হতে পারে — অর্থাৎ রানটাইমের সময় একটি মান অপ্রত্যাশিত টাইপ থাকতে পারে এবং এই ধরণের জন্য অপারেশন অযৌক্তিক প্রয়োগ করা হয়। এই অপারেশনটি যেখানে প্রোগ্রামিংয়ের ভুল হয়েছিল সেই জায়গার অনেক পরে ঘটতে পারে - যা সেই জায়গায় যেখানে ভুল ধরণের ডেটা এমন জায়গায় প্রবেশ করা উচিত নয়। এটি বাগ সনাক্ত করতে অসুবিধা সৃষ্টি করে।
স্থিরভাবে টাইপিত চাচাত ভাইদের তুলনায় গতিময়ভাবে টাইপ করা ভাষা সিস্টেমগুলি সোর্স কোডটিতে "কমপাইল-টাইম" কম পরীক্ষা করে তোলে (তবে পরীক্ষা করবে, উদাহরণস্বরূপ, প্রোগ্রামটি সিনট্যাকটিক্যালি সঠিক কিনা)। রান-টাইম চেকগুলি সম্ভাব্যতর পরিশীলিত হতে পারে, কারণ তারা গতিশীল তথ্য পাশাপাশি সংকলনের সময় উপস্থিত যে কোনও তথ্য ব্যবহার করতে পারে use অন্যদিকে, রানটাইম চেকগুলি কেবলমাত্র দাবি করে যে শর্তগুলি প্রোগ্রামের একটি নির্দিষ্ট নির্বাহকে ধারণ করে এবং প্রোগ্রামগুলির প্রতিটি সম্পাদনের জন্য এই চেকগুলি পুনরাবৃত্তি করা হয়।
গতিযুক্ত টাইপযুক্ত ভাষাগুলির বিকাশ প্রায়শই ইউনিট পরীক্ষার মতো প্রোগ্রামিং অনুশীলনগুলির দ্বারা সমর্থিত। পেশাদার সফ্টওয়্যার বিকাশের জন্য টেস্টিং একটি মূল অনুশীলন, এবং গতিশীল টাইপ করা ভাষায় বিশেষত গুরুত্বপূর্ণ। অনুশীলনে, সঠিক প্রোগ্রাম অপারেশন নিশ্চিত করার জন্য করা পরীক্ষাটি স্ট্যাটিক টাইপ-চেকিংয়ের চেয়ে ত্রুটিগুলির বিস্তৃত বিস্তৃত শনাক্ত করতে পারে তবে বিপরীতভাবে ত্রুটিগুলির তত বিস্তৃতভাবে অনুসন্ধান করতে পারে না যা পরীক্ষার এবং স্থির ধরণের চেক উভয়ই সনাক্ত করতে সক্ষম হয়। টেস্টিংটি সফ্টওয়্যার বিল্ড চক্রের সাথে সংযুক্ত করা যেতে পারে, এক্ষেত্রে এটি একটি "সংকলন-সময়" পরীক্ষা হিসাবে বিবেচনা করা যেতে পারে, যাতে প্রোগ্রাম ব্যবহারকারীকে ম্যানুয়ালি এই জাতীয় পরীক্ষা চালাতে হবে না।
তথ্যসূত্র
- পিয়ার্স, বেঞ্জামিন (2002) প্রকার এবং প্রোগ্রামিং ভাষা। এমআইটি প্রেস। আইএসবিএন 0-262-16209-1।
myObject[remoteDataName]
। তারপরে কোন সম্পত্তিটি এটি বেছে নেবে বা এমনকি এটি বৈধ সম্পত্তি হলেও তা জানার কোনও উপায় নেই।
"গতিশীল টাইপড" শব্দটি দুর্ভাগ্যক্রমে বিভ্রান্তিমূলক। সমস্ত ভাষা স্থিতিযুক্ত টাইপ করা হয়, এবং প্রকারগুলি হ'ল প্রকাশের বৈশিষ্ট্য (কিছু ভাবার মতো মানের নয়)। যাইহোক, কিছু ভাষার কেবল একটি প্রকার থাকে। এগুলিকে ইউনি টাইপ করা ভাষা বলা হয়। এই জাতীয় ভাষার একটি উদাহরণ হ'ল আনটাইপড ল্যাম্বদা ক্যালকুলাস।
টাইপযুক্ত ল্যাম্বদা ক্যালকুলাসে, সমস্ত পদগুলি ল্যাম্বডা শর্তাদি এবং কোনও পদে সঞ্চালিত হওয়া একমাত্র ক্রিয়াকলাপটি এটি অন্য পদটিতে প্রয়োগ করা হয়। অতএব সমস্ত ক্রিয়াকলাপ সর্বদা হয় অসীম পুনরাবৃত্তি বা ল্যাম্বডা টার্মের ফলস্বরূপ, তবে কখনও ত্রুটির সংকেত দেয় না।
যাইহোক, ছিল আমরা আদিম সংখ্যা এবং গাণিতিক অপারেশন সঙ্গে untyped ল্যামডা ক্যালকুলাস বৃদ্ধির জন্য, তাহলে আমরা অর্থহীন কাজগুলি করতে পারে, এমন দুই ল্যামডা পদ একসঙ্গে যোগ: (λx.x) + (λy.y)
। কেউ তর্ক করতে পারে যে একমাত্র বুদ্ধিমান কাজটি হ'ল এটি হওয়ার সময় একটি ত্রুটি সংকেত দেওয়া, তবে এটি করতে সক্ষম হতে প্রতিটি মানকে একটি সূচক দিয়ে ট্যাগ করতে হয় যা শব্দটি ল্যাম্বডা শব্দ বা একটি সংখ্যা কিনা তা নির্দেশ করে। সংযোজন অপারেটর তখন যাচাই করবে যে প্রকৃতপক্ষে উভয় যুক্তিই সংখ্যা হিসাবে ট্যাগ হয়েছে এবং যদি তা না হয় তবে একটি ত্রুটি সংকেত দেয়। মনে রাখবেন যে এই ট্যাগগুলি নেই প্রকার , কারণ প্রকারগুলি প্রোগ্রামগুলির বৈশিষ্ট্য, সেই প্রোগ্রামগুলির দ্বারা উত্পাদিত মানগুলির নয়।
একটি ইউনি টাইপ করা ভাষা যা এটি করে তাকে ডায়নামিকালি টাইপড বলা হয়।
জাভাস্ক্রিপ্ট, পাইথন, এবং রুবির মতো ভাষাগুলি সবই টাইপযুক্ত। আবার typeof
জাভাস্ক্রিপ্টে অপারেটর type
এবং পাইথনে ফাংশনের বিভ্রান্তিকর নাম রয়েছে; তারা অপারেডগুলির সাথে যুক্ত ট্যাগগুলি তাদের ধরণের নয়, ফিরিয়ে দেয়। একইভাবে, dynamic_cast
সি ++ এবং instanceof
জাভাতে টাইপ চেক করবেন না ।
"যখন উত্স কোড অনুবাদ করা হয়"
"যখন প্রকারগুলি পরীক্ষা করা হয়"
5 + '3'
গো এবং পাইথনের মতো দৃ strongly়ভাবে টাইপ করা ভাষায় টাইপ ত্রুটির একটি উদাহরণ , কারণ তারা "ধরণের জবরদস্তি" -> নির্দিষ্ট প্রসঙ্গে যেমন দুটি ধরণের মার্জ করার ক্ষেত্রে কোনও মান পরিবর্তনের জন্য ক্ষমতা দেয় না। দুর্বলভাবে টাইপ করা ভাষা যেমন জাভাস্ক্রিপ্ট কোনও ধরণের ত্রুটি ফেলবে না (ফলস্বরূপ '53'
)।
"স্ট্যাটিক অ্যান্ড কম্পাইল্ড" এবং "ডায়নামিক অ্যান্ড ইন্টারপ্রিটেড" এর সংজ্ঞাগুলি একই রকম ... তবে মনে রাখবেন এটি "যখন সোর্স কোড অনুবাদ করা হয় তখন টাইপগুলি" বনাম "চেক করা হয়" remember
ভাষাটি সংকলিত বা ব্যাখ্যা করা নির্বিশেষে আপনি একই ধরণের ত্রুটি পাবেন ! আপনাকে এই পদগুলি ধারণাগতভাবে আলাদা করতে হবে।
গতিশীল, ব্যাখ্যা করা
def silly(a):
if a > 0:
print 'Hi'
else:
print 5 + '3'
silly(2)
পাইথন দু'টি ব্যাখ্যা করা এবং গতিশীলভাবে টাইপ করা হয়, এটি কেবল এটি সম্পাদন করে কোডটি অনুবাদ করে এবং টাইপ-চেক করে। else
ব্লক কখনো executes, তাই 5 + '3'
এমনকি দিকে তাকিয়ে না হয়!
যদি এটি স্থিরভাবে টাইপ করা হত?
কোডটি চালানোর আগে একটি ধরণের ত্রুটি নিক্ষেপ করা হবে। এটি ব্যাখ্যার পরেও রান-টাইমের আগে টাইপ-চেকিং সম্পাদন করে।
যদি এটি সংকলন করা হত?
else
ব্লক অনূদিত করা হবে / রান সময়ের আগে দিকে তাকিয়ে থাকলেও কারণ এটি পরিবর্তনশীল টাইপ করা হচ্ছে এটি একটি ত্রুটির নিক্ষেপ না! কার্যকরভাবে টাইপ করা ভাষাগুলি মৃত্যুদন্ড কার্যকর হওয়া পর্যন্ত প্রকারগুলি পরীক্ষা করে না এবং সেই লাইনটি কখনও কার্যকর করে না।
স্থির, সংকলিত
package main
import ("fmt"
)
func silly(a int) {
if (a > 0) {
fmt.Println("Hi")
} else {
fmt.Println("3" + 5)
}
}
func main() {
silly(2)
}
প্রকারগুলি দৌড়ানোর আগে পরীক্ষা করা হয় (স্থিতিশীল) এবং টাইপ ত্রুটি সঙ্গে সঙ্গে ধরা পড়ে! ধরণগুলি একই ব্যাখ্যা থাকলেও এটি ব্যাখ্যা করা হলে রান-টাইমের আগে পরীক্ষা করা হবে। যদি এটি গতিশীল হয় তবে সংকলনের সময় কোডটি লক্ষ্য করা সত্ত্বেও এটি কোনও ত্রুটি ফেলবে না।
একটি সংকলিত ভাষার রান-টাইমে স্টাটিকালি টাইপ করা থাকলে (বনাম ডায়নামিকভাবে) ভাল পারফরম্যান্স পাবে; ধরণের জ্ঞান মেশিন কোড অপ্টিমাইজেশনের জন্য অনুমতি দেয়।
কার্যকরভাবে চালানোর সময় প্রকারভেদগুলি পরীক্ষা করার প্রয়োজন হয় না বলে স্ট্যাটিক্যালি টাইপ করা ভাষাগুলি অভ্যন্তরীণভাবে রান-টাইমে আরও ভাল পারফরম্যান্স পায় (এটি চলার আগে এটি পরীক্ষা করে)।
একইভাবে, সংকলিত ভাষাগুলি রান সময়ে দ্রুত হয় কারণ কোডটি ইতিমধ্যে "অনুবাদ" / ফ্লাইতে অনুবাদ করার প্রয়োজনের পরিবর্তে অনুবাদ করা হয়েছে।
নোট করুন যে সংকলিত এবং স্ট্যাটিকালি উভয় ভাষাতেই যথাক্রমে অনুবাদ এবং টাইপ-চেকিংয়ের জন্য দৌড়ানোর আগে বিলম্ব হবে।
স্থিতিশীল টাইপিং কার্যকর হওয়ার সময় এগুলি সন্ধান করার পরিবর্তে (তাত্ক্ষণিক দীর্ঘ প্রোগ্রামের জন্য কার্যকর) পরিবর্তে ত্রুটিগুলি ধরা দেয়। এটি আরও "কঠোর" কারণ এটি আপনার প্রোগ্রামের কোথাও ত্রুটিগুলি টাইপ করার অনুমতি দেয় না এবং প্রায়শই পরিবর্তনশীল ধরণের পরিবর্তন থেকে বাধা দেয় যা অনিচ্ছাকৃত ত্রুটির বিরুদ্ধে আরও প্রতিরোধ করে।
num = 2
num = '3' // ERROR
গতিশীল টাইপিং আরও নমনীয়, যা কিছু প্রশংসা করে। এটি সাধারণত ভেরিয়েবলকে প্রকার পরিবর্তন করার অনুমতি দেয়, যার ফলে অপ্রত্যাশিত ত্রুটি হতে পারে।
স্ট্যাটিকালি টাইপ করা ভাষা : প্রতিটি ভেরিয়েবল এবং এক্সপ্রেশন ইতিমধ্যে সংকলন সময়ে জানা যায় known
(int a;
একটি রানটাইমের সময় শুধুমাত্র পূর্ণসংখ্যার ধরণের মান নিতে পারে)
উদাহরণ: সি, সি ++, জাভা
ডায়নামিকালি টাইপ করা ভাষাগুলি : চলকগুলি রানটাইমে বিভিন্ন মান অর্জন করতে পারে এবং রান টাইমের সময় তাদের ধরন নির্ধারিত হয়।
( var a;
একটি রানটাইমের সময় যে কোনও ধরণের মান নিতে পারে)
উদাহরণ: রুবি, পাইথন।
সংকলনের সময় স্ট্যাটিকালি টাইপ করা ভাষা টাইপ-চেক করুন এবং প্রকারটি পরিবর্তন করতে পারে না। (টাইপ-কাস্টিং মন্তব্যের সাথে সুন্দর হয়ে উঠবেন না, একটি নতুন ভেরিয়েবল / রেফারেন্স তৈরি করা হবে)।
সচলভাবে টাইপ করা ভাষাগুলি রান-টাইমে টাইপ-চেক এবং চলক সময়ে পরিবর্তিত একটি ভেরিয়েবলের ধরণ changed
মিষ্টি এবং সাধারণ সংজ্ঞা, তবে প্রয়োজনের সাথে মানানসই: স্ট্যাটিকালি টাইপ করা ভাষাগুলি টাইপটিকে তার সম্পূর্ণ ক্ষেত্রের জন্য একটি ভেরিয়েবলের সাথে বেঁধে রাখে (সেগ: এসসিএলএ) গতিশীল টাইপ করা ভাষাগুলি এই ভেরিয়েবলের দ্বারা বর্ণিত প্রকৃত মানকে টাইপটিকে আবদ্ধ করে।
সি ++, জাভা এবং পাইথনের মতো ডায়নামিকালি টাইপ করা ভাষাগুলির মতো স্ট্যাটিকালি টাইপ করা ভাষাগুলি কেবল ভেরিয়েবলের ধরণের কার্যকরকরণের ক্ষেত্রে পৃথক হয়। স্ট্যাটিকালি টাইপ করা ভাষাগুলিতে ভেরিয়েবলের জন্য স্ট্যাটিক ডেটা টাইপ থাকে, এখানে সংকলনের সময় ডেটা টাইপ পরীক্ষা করা হয় তাই ডিবাগ করা অনেক সহজ ... যেখানে ডাইনামিকালি টাইপ করা ভাষাগুলি একই কাজ করে না, ডাটা টাইপ যাচাই করে যা প্রোগ্রাম চালায় এবং তাই ডিবাগিং কিছুটা কঠিন।
তদুপরি তাদের একটি খুব ছোট পার্থক্য রয়েছে এবং দৃ strongly ়ভাবে টাইপ করা এবং দুর্বল টাইপ করা ভাষার সাথে সম্পর্কিত হতে পারে । একটি দৃ strongly়ভাবে টাইপ করা ভাষা আপনাকে এক ধরণের অন্য উদাহরণ হিসাবে ব্যবহার করতে দেয় না। সি এবং সি ++ ... যেখানে দুর্বলভাবে টাইপ করা ভাষাগুলি যেমন, উদাহরণস্বরূপ allow
স্ট্যাটিকালি টাইপড
প্রকারগুলি রান-টাইমের আগে পরীক্ষা করা হয় যাতে ভুলগুলি আগে ধরা যেতে পারে।
উদাহরণ = সি ++
ডায়নামিকালি টাইপড
প্রবাহের সময় প্রকারগুলি পরীক্ষা করা হয়।
উদাহরণ = পাইথন
স্ট্যাটিক টাইপ করা ভাষা (সংকলক পদ্ধতি কলগুলি এবং সংকলন রেফারেন্সগুলি সমাধান করে):
গতিশীল টাইপ করা ভাষা (চলমান প্রোগ্রামে নেওয়া সিদ্ধান্ত):
পরিবর্তনশীল টাইপ করা ভাষাটি কী পরিবর্তনশীল প্রকারগুলি ব্যবহার করা উচিত তা ভেবে ওভারহেড ছাড়াই দ্রুত প্রোটোটাইপ অ্যালগরিদম ধারণাগুলিতে সহায়তা করে (যা স্ট্যাটিকালি টাইপড ল্যাঙ্গুয়াগ ই একটি প্রয়োজনীয়তা )।
স্ট্যাটিক টাইপিং: জাভা এবং স্কালার মতো ভাষাগুলি স্থির টাইপযুক্ত।
ভেরিয়েবলগুলি কোনও কোডে ব্যবহার করার আগে তাদের সংজ্ঞায়িত করতে হবে এবং শুরু করতে হবে।
প্রাক্তন জন্য ইন্ট এক্স; x = 10;
System.out.println (x) এর;
ডায়নামিক টাইপিং: পার্ল একটি ডায়নামিক টাইপ করা ভাষা।
ভেরিয়েবলগুলি কোডে ব্যবহৃত হওয়ার আগে তাদের আরম্ভ করার দরকার নেই।
Y = 10; কোডের পরবর্তী অংশে এই পরিবর্তনশীলটি ব্যবহার করুন
$
), অ্যারে ( @
) এবং হ্যাশ ( %
) রয়েছে। পার্লের একটি ভেরিয়েবলের ধরণটি সংকলন সময়ে জানা যায় এবং বাকী চলকগুলি আজীবন একই থাকে।