جاوااسکریپت یک زبان با تایپدهی پویا (Dynamically Typed) است؛ به این معنی که هنگام تعریف یک متغیر، نیازی نیست نوع دادهی آن (Data Type) را مشخص کنید. در عوض، نوع متغیر بر اساس مقداری که در زمان اجرای برنامه به آن اختصاص داده میشود، تعیین میگردد. این ویژگی به شما اجازه میدهد که نوع یک متغیر را در طول برنامه تغییر دهید.
بیایید به یک مثال نگاه کنیم:
let example = "Hello";
example = 42;
در این مثال، ما متغیری به نام example داریم که ابتدا از نوع رشته (string) است. اما بعداً مقدار آن را به یک عدد (number) تغییر میدهیم.
انعطافپذیریِ تایپدهی پویا باعث میشود جاوااسکریپت بخشندهتر باشد و کار با آن برای اسکریپتنویسیهای سریع آسانتر شود، اما همین ویژگی میتواند باعث بروز باگهایی شود که شناسایی آنها (بهخصوص وقتی برنامهی شما بزرگتر میشود) سختتر باشد.
در زبانهای با تایپدهی ایستا (Statically Typed) مانند C# یا C++، شما باید هنگام ایجاد یک متغیر، نوع دادهی آن را اعلام کنید و آن نوع دیگر نمیتواند تغییر کند.
برای مثال، اگر متغیری را از نوع عدد صحیح (integer) تعریف کنید، فقط میتوانید مقادیر عدد صحیح به آن اختصاص دهید. اگر سعی کنید نوع دیگری به آن بدهید، برنامه با خطا مواجه میشود.
در اینجا مثالی به زبان C# آورده شده است:
int data = 42; // متغیر data همیشه باید یک عدد صحیح باشد
data = "Hello"; // این کار در سیشارپ باعث ایجاد خطا میشود
تفاوت بین تایپدهی پویا و ایستا در انعطافپذیری در مقابل امنیتِ کد شماست. زبانهای پویا انعطافپذیری را ارائه میدهند اما به قیمت احتمال بروز خطاهای زمان اجرا (Runtime Errors).
زبانهای ایستا قوانین سختگیرانهتری را اعمال میکنند که میتواند از بروز خطاهای خاص جلوگیری کند، اما به تعاریف اولیه بیشتری نیاز دارند و انعطافپذیری کمتری در تغییر انواع داده نشان میدهند.
در اینجا مثال دیگری از ایجاد یک متغیر با نوع عدد و سپس تغییر آن به رشته در مراحل بعدی آورده شده است:
let data = 100; // در ابتدا یک عدد است
data = "New data"; // به صورت پویا به یک رشته تغییر مییابد
در یک زبان با تایپدهی ایستا، این نوع تغییر مجاز نخواهد بود، زیرا نوع داده ثابت است.
در نتیجه، تایپدهی پویای جاوااسکریپت به متغیرها اجازه میدهد آزادانه تغییر نوع دهند که این امر انعطافپذیری ایجاد میکند اما میتواند منجر به خطاهای غیرمنتظره در طول اجرا شود.
زبانهای ایستا مانند Java از شما میخواهند که انواع متغیرها را از قبل مشخص کنید، که این کار به شناسایی خطاها قبل از اجرای برنامه کمک میکند اما انعطافپذیری کمتری دارد.
سوالات
کدامیک از موارد زیر تایپدهی پویا در جاوااسکریپت را به بهترین شکل توصیف میکند؟
- شما باید قبل از اختصاص مقدار، نوع متغیر را اعلام کنید.
- نوع دادهی یک متغیر زمانی تعیین میشود که مقداری به آن اختصاص یابد.
- متغیرها فقط میتوانند یک نوع داده را نگه دارند.
- جاوااسکریپت اجازه نمیدهد نوع متغیرها پس از تعریف شدن تغییر کند.
تفاوت کلیدی بین زبانهای دارای تایپدهی پویا و زبانهای دارای تایپدهی ایستا چیست؟
- زبانهای پویا از شما میخواهند قبل از اختصاص مقادیر، نوع متغیر را اعلام کنید.
- زبانهای ایستا اجازه میدهند نوع متغیر در زمان اجرا تغییر کند.
- زبانهای ایستا یک نوع متغیر ثابت را اعمال میکنند.
- زبانهای پویا اجازه تغییر مقدار متغیر را نمیدهند.
در جاوااسکریپت، اگر یک متغیر را تعریف کنید و بعداً مقداری از یک نوع متفاوت به آن اختصاص دهید چه اتفاقی میافتد؟
- جاوااسکریپت خطای زمان کامپایل (Compile-time error) میدهد.
- متغیر بدون هیچ خطایی به نوع جدید تغییر مییابد.
- متغیر نوع اصلی خود را حفظ کرده و مقدار جدید را نادیده میگیرد.
- برنامه کرش (Crash) میکند.
