আমি খুঁজে পেয়েছি যে কিছু লোক জাভাস্ক্রিপ্টকে একটি "গতিময়, দুর্বল টাইপড" ভাষা বলে, তবে কেউ কেউ "টাইপড" বলে? আসলেই এটি কোনটি?
আমি খুঁজে পেয়েছি যে কিছু লোক জাভাস্ক্রিপ্টকে একটি "গতিময়, দুর্বল টাইপড" ভাষা বলে, তবে কেউ কেউ "টাইপড" বলে? আসলেই এটি কোনটি?
উত্তর:
জাভাস্ক্রিপ্ট হয় untyped:
(উত্স: no.gd )
এমনকি ব্রেন্ডন আইচও তাই বলেছেন। টুইটারে, তিনি এই প্রশ্নের সাথে যুক্ত একটি সুতোর জবাব দিয়েছেন:
... একাডেমিক প্রকারগুলি "স্ট্যাটিক ধরণের নয়" মানে "অবিরতবিহীন" ব্যবহার করে ...
সুতরাং সমস্যাটি হ'ল টাইপবিহীন কয়েকটি আলাদা সংজ্ঞা রয়েছে ।
উপরোক্ত উত্তরের একটিতে একটি সংজ্ঞা সম্পর্কে কথা বলা হয়েছে - রানটাইম মানগুলি ট্যাগ করে না এবং প্রতিটি মানকে বিট হিসাবে দেখায়। জাভাস্ক্রিপ্ট করে ট্যাগ মূল্যবোধ ও যারা ট্যাগ উপর ভিত্তি করে বিভিন্ন আচরণ আছে। সুতরাং জাভাস্ক্রিপ্ট অবশ্যই এই বিভাগে ফিট করে না।
অন্য সংজ্ঞাটি প্রোগ্রামিং ল্যাঙ্গুয়েজ থিওরি থেকে (ব্র্যান্ডন যে একাডেমিক বিষয়টিকে উল্লেখ করছেন) from এই ডোমেনে, untyped মাত্র উপায়ে সবকিছু একটি একক টাইপ জন্যে ।
কেন? কারণ কোনও ভাষা কেবল তখনই একটি প্রোগ্রাম তৈরি করে যখন প্রমান করতে পারে যে প্রকারগুলি প্রান্তিককরণ (ওরফে কারি-হাওয়ার্ড চিঠিপত্র ; প্রকারগুলি উপপাদ্য, প্রোগ্রামগুলি প্রমাণ)। একটি টাইপযুক্ত ভাষায় এর অর্থ:
একটি টাইপ করা ভাষার বিপরীতে:
তাই সেখানে যদি আপনি,, PLT মধ্যে, যাও untyped মাত্র উপায়ে পরিবর্তনশীল টাইপ করা এবং টাইপ করা মানে স্ট্যাটিক্যালি টাইপ করা । জাভা স্ক্রিপ্ট অবশ্যই এই বিভাগে টাইপ করা হয়।
আরো দেখুন:
1. 2. 3.
টাইপ করা ভাষার জন্য জাভাস্ক্রিপ্টের সাথে মেলে না। এখানে কেবল এক প্রকারই নেই - প্রায় 4 - 5 রয়েছে তাই যা জাভাস্ক্রিপ্টটি টাইপ না করে তা প্রদর্শন করে কীভাবে?
/ strong দুর্বল করতে কিভাবে কম্পাইলার, যদি প্রযোজ্য হয়, হ্যান্ডলগুলি টাইপিং সম্পর্কিত ভাবা যেতে।
দুর্বলভাবে টাইপ করা মানে সংকলক, যদি প্রযোজ্য হয় তবে সঠিক টাইপিং প্রয়োগ করে না। নিহিত সংকলক বাধা ছাড়াই, নির্দেশটি রান-টাইমের সময় ত্রুটি করবে will
"12345" * 1 === 12345 // string * number => number
দৃ typ়ভাবে টাইপ করা মানে একটি সংকলক রয়েছে এবং এটি আপনাকে স্ট্রিং থেকে পূর্ণসংখ্যায় স্পষ্ট কাস্ট করতে চায়।
(int) "12345" * 1 === 12345
উভয় ক্ষেত্রেই, কিছু সংকলকের বৈশিষ্ট্যগুলি আপনার জন্য রূপান্তর করার জন্য সংকলন-সময় নির্দেশকে স্পষ্টতই পরিবর্তন করতে পারে, যদি এটি নির্ধারণ করতে পারে যে এটি করা সঠিক জিনিস।
এখনও অবধি, জাভাস্ক্রিপ্টকে নট-স্ট্রংলি টাইপযুক্ত হিসাবে শ্রেণীবদ্ধ করা যেতে পারে। এর অর্থ হয় এটি দুর্বল-টাইপযুক্ত বা আন-টাইপযুক্ত।
ভাষার নির্দেশাবলী কীভাবে প্রকারভেদ করে সে সম্পর্কে গতিশীল / স্ট্যাটিক সম্পর্কে চিন্তাভাবনা করা যেতে পারে।
ডায়নামিকালি টাইপ করা মানে মানটির প্রকার প্রয়োগ করা হয় তবে চলকটি কেবল কোনও প্রকারের যে কোনও মানকে উপস্থাপন করে।
x = 12345; // number
x = "string"; // string
x = { key: "value" }; // object
y = 123 + x; // error or implicit conversion must take place.
স্ট্যাটিকালি টাইপ করা মানে ভেরিয়েবল টাইপটি দৃ .়ভাবে প্রয়োগ করা হয় এবং মানের প্রকারটি কম প্রয়োগ করা হয়।
int x = 12345; // binds x to the type int
x = "string"; // too late, x is an integer - error
string y = 123; // error or implicit conversion must take place.
এখনও অবধি, জাভাস্ক্রিপ্টকে নোট-স্ট্যাটিকালি-টাইপযুক্ত হিসাবে শ্রেণীবদ্ধ করা যেতে পারে। এছাড়াও, এটিকে টাইপ করা থাকলে ডায়নামিকালি টাইপ করা হয়। সুতরাং আমাদের দেখতে হবে টাইপিংয়ের অর্থ কী।
টাইপ করা মানে হল ভাষাটি বিভিন্ন ধরণের যেমন স্ট্রিং , সংখ্যা , বুলিয়ান , অবজেক্ট , অ্যারে , নাল , অপরিজ্ঞাত এবং এরমধ্যে পার্থক্যকরে। এছাড়াও প্রতিটি অপারেশন নির্দিষ্ট প্রকারের সাথে আবদ্ধ। সুতরাং আপনিএকটি স্ট্রিং দ্বারা একটি পূর্ণসংখ্যা ভাগ করতে পারবেন না।
2 / "blah" // produces NaN
Untyped উপায়ে বিভাজক অপারেশন পূর্ণসংখ্যা দ্বারা স্ট্রিং প্রথম চার বাইট চিকিত্সায় স্থাপিত হবে স্ট্রিং হিসাবে পূর্ণসংখ্যা । এর কারণ হ'ল শিরোনামহীন অপারেশনগুলি সরাসরি বিটগুলিতে সঞ্চালিত হয়, পর্যবেক্ষণের জন্য কোনও ধরণের নেই। ফলাফলটি বেশ অপ্রত্যাশিত কিছু হবে:
2 / "blah" // will be treated as 2 / 1500275048
যেহেতু জাভাস্ক্রিপ্ট টাইপড হওয়ার সংজ্ঞা অনুযায়ী আচরণ করে, এটি অবশ্যই হওয়া উচিত। এবং তাই এটি অবশ্যই ডায়নামিকালি টাইপড, এবং দুর্বলভাবে টাইপ করা উচিত।
যদি কেউ দাবি করে যে জাভাস্ক্রিপ্টটি শিরোনামহীন, এটি কেবলমাত্র একাডেমিক তত্ত্বের জন্য, ব্যবহারিক প্রয়োগের জন্য নয়।
জাভাস্ক্রিপ্ট দুর্বলভাবে টাইপ করা হয় । এটি অবশ্যই "টাইপযুক্ত" নয় তবে এর দুর্বল টাইপযুক্ত প্রকৃতি অন্তর্নিহিত রূপান্তরগুলির ক্ষেত্রে অনেক স্বাচ্ছন্দ্যের অনুমতি দেয়।
মনে রাখবেন যে জাভাস্ক্রিপ্টও গতিশীলভাবে টাইপ করা আছে। এই টাইপিং পদ্ধতিটি যা "হাঁসের টাইপিং" হিসাবে পরিচিত তা মঞ্জুরি দেয় ।
তুলনা করার জন্য বিবেচনা করুন যে জাভাস্ক্রিপ্ট দৃ strongly ়ভাবে টাইপ করা হয় না বা এটি স্ট্যাটিকালি টাইপ করা হয় না। কখনও কখনও কোন জিনিস যা না তা বোঝার ফলে এটি কী তা আরও ভালভাবে দেখতে আপনাকে সহায়তা করতে পারে।
লেখকের মতে জাভাস্ক্রিপ্টও ডায়নামিকালি টাইপ করা হিসাবে শ্রেণিবদ্ধ করা হয়েছে । উইকি জানিয়েছে যে ডায়নামিকালি টাইপ করা ভাষাগুলি সংকলকটির পরিবর্তে রানটাইমে টাইপ করা হয় যখন দুর্বল টাইপড আপনার কোডের মধ্যে ফ্লাইতে টাইপ পরিবর্তন করার ক্ষমতা বোঝায়। সুতরাং হ্যাঁ এটি উভয়ই গতিশীল টাইপ করা হয়েছে এবং দুর্বল টাইপ করা।
এখানে যে সমস্যাটি অনেক প্রোগ্রামারকে বিভ্রান্ত করছে তা হ'ল এর মতো সংজ্ঞাটি কোথাও প্রমিত হয় না। টাইপযুক্ত প্রোগ্রামিং ভাষাটি শব্দটি দ্ব্যর্থক। এটি কি এমন কোনও ভাষার সাথে উল্লেখ করে যেটির কোনও ডেটা টাইপ নেই বা এমন একটি ভাষা যা ল্যাম্বডা ক্যালকুলাস আনটাইপযুক্ত বৈকল্পিক ?
জাভাস্ক্রিপ্ট / ইসসিএমএসক্রিপ্টের একটি টাইপ সিস্টেম রয়েছে এবং এর সমস্ত ফাংশনের ডোমেন কোনও রেফারেন্স স্পেসিফিকেশন টাইপ গ্রহণ করবে। বাস্তবে জাভাস্ক্রিপ্টের একক ডেটা টাইপ রয়েছে এর অর্থ। এটি বাস্তবায়নের বিষয় যা খুব উন্নত জাভাস্ক্রিপ্ট প্রোগ্রামারদের কাছে আরও গুরুত্বপূর্ণ। গড় জাভাস্ক্রিপ্ট প্রোগ্রামার কেবলমাত্র বিমূর্ত ভাষা ডেটা ধরণের বিষয়ে যত্নশীল যা ECMAScript দ্বারা নির্দিষ্ট করা হয়েছে।
প্রতিদিনের প্রোগ্রামার প্রসঙ্গে, গবেষক বা তাত্ত্বিক কম্পিউটার বিজ্ঞানী নন, টাইপযুক্ত শব্দটি একটি ভুলবিত্ত হিসাবে ব্যবহৃত হয় কারণ বেশিরভাগ লোক ল্যাম্বডা ক্যালকুলাস করেন না। সুতরাং এই শব্দটি জনগণকে বিভ্রান্ত করে এবং মনে হয় যে জাভাস্ক্রিপ্টের কোনও ডেটা টাইপ নেই যা কেবল সত্য নয়। যে কেউ কখনও ব্যবহার করেছেন typeof
জানেন যে জাভাস্ক্রিপ্টের নিজস্ব ভাষার ডেটা ধরণের রয়েছে:
var test = "this is text";
typeof(test);
উৎপাদনের
"STRING"
এর নাম ECMAScript ভাষার জন্য নিম্নলিখিত প্রকারের করবেঃ undefined
, null
, string
, boolean
, number
,object
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
জাভাস্ক্রিপ্টের জন্য আরও সঠিক উপাধি স্পষ্টভাবে টাইপ করা হবে, গতিশীলভাবে টাইপ করা হবে, বা দুর্বলভাবে / আলগাভাবে টাইপ করা হবে (বা এর কিছু সংমিশ্রণে) যে জাভাস্ক্রিপ্ট কিছু ক্ষেত্রে টাইপ কর্কশন ব্যবহার করে যা টাইপটিকে অন্তর্নিহিত করে কারণ আপনাকে স্পষ্টভাবে নির্দিষ্ট করতে হবে না আপনার ভেরিয়েবল টাইপ। এটি দুর্বলভাবে number
টাইপের আওতায় পড়ে কারণ, কিছু ভাষার চেয়ে ভিন্ন যা ভাসা এবং পূর্ণসংখ্যার ইত্যাদির মধ্যে পার্থক্য করে, এটি কেবল একটি সংখ্যাকে সমস্ত সংখ্যার অন্তর্ভুক্ত করতে ব্যবহার করে এবং পূর্বে উল্লিখিত [ECMAScript বিভাগের ধারা 9] প্রকারের জবরদস্তি ব্যবহার করে , এর বিপরীতে শক্তিশালী বিপরীতে জোরালোভাবে টাইপ করা ভাষাতে খুব নির্দিষ্ট ডেটা টাইপ থাকে (যেমন আপনাকে নির্দিষ্ট করতে হবে int
বা করতে হবে float
)।
স্থিতিশীল এবং গতিশীল টাইপযুক্ত ভাষার সংজ্ঞা মানযুক্ত করা হয় না, তবে কম্পিউটারগুলি যখন বিকশিত হতে শুরু করত তখন একটিও বাইটের আকার ছিল না। স্থির এবং গতিশীল টাইপিং প্রায়শই নির্দিষ্ট ভাষার বৈশিষ্ট্যগুলির উপস্থিতি উল্লেখ করে। যার মধ্যে একটি রানটাইম টাইপ-চেকিং বা ডায়নামিক টাইপ-চেকিং বলা হয় । আপনি যদি জাভাস্ক্রিপ্ট ব্যবহার করেছেন, আপনি ইতিমধ্যে জানেন যে প্রকারগুলি পরীক্ষা করতে এটি রানটাইম অবধি অপেক্ষা করে, যার কারণে আপনি TypeError
আপনার কোডটি কার্যকর করার সময় ব্যতিক্রম পান। উদাহরণ এখানে
আমি মনে করি শীর্ষ ভোটের উত্তরটি জাভাস্ক্রিপ্ট ফাংশনগুলির বহুবৈচিত্র্যকে এমন ফাংশনগুলির সাথে বিভ্রান্ত করছে যা আক্ষরিক কোনও কিছু গ্রহণ করবে (লাম্বডা ক্যালকুলাসের টাইপযুক্ত রূপগুলি হিসাবে) যা একটি অ্যাসোসিয়েশন ফলস ।
মনে রাখবেন যে জাভাস্ক্রিপ্ট আপনাকে কীটি জিজ্ঞাসা করতে typeof(your_variable)
এবং প্রকারগুলির তুলনা করতে: 5==="5"
রিটার্ন দেয় false
। সুতরাং আমি মনে করি না আপনি এটিকে টাইপড বলতে পারেন।
এটি গতিশীল এবং (অনুমান হিসাবে) দুর্বল টাইপ করা হয়। আপনি এটি ডাক টাইপিং (অ্যান্ড্রু এর লিঙ্কটি দেখুন) ব্যবহার করেন এবং ক্লাস এবং উত্তরাধিকারের পরিবর্তে প্রোটোটাইপিংয়ের পরে ওওপি সরবরাহ করে তা জানতে চাইতে পারেন ।
String a = "blah";
বা var a:String = 'blah';
টাইপযুক্ত ভেরিয়েবলগুলি) AT এজন্যই এটি টাইপড।
এটি টাইপ করার সময় (আপনি "কিছু টাইপ টাইপ" জিজ্ঞাসা করতে পারেন এবং এর নির্দিষ্ট প্রকারটি শিখতে পারেন, এটি খুব দুর্বল।
প্রদত্ত:
var a = "5";
আপনি বলতে পারেন যে একটি একটি স্ট্রিং। তবে, আপনি যদি তারপর লিখুন:
var b = a + 10;
বি 15 এর সমান একটি ইন্টিওরেক্ট, সুতরাং একটি ইন্টার এর মতোই অভিনয় করা। অবশ্যই, আপনি তারপর লিখতে পারেন:
var c = a + "Hello World";
এবং সি "5 হেলো ওয়ার্ল্ড" এর সমান হবে, সুতরাং এ আবার একটি স্ট্রিংয়ের মতো কাজ করছে।