تفاوت بین زبانهای static و dynamic type
May 2020
زبان استاتیک تایپ چیست؟ زبان داینامیک تایپ چیست؟ در این مقاله جواب هر دو سوال را خواهید گرفت
در این مقاله مثالهایی از زبانهای برنامه نویسی مثل python, php, perl خواهیم داشت اما نیازی نیست که حتما این زبانها را بلد باشید که این مثالها را بفهمید. به این موضوع دقت کنید که استفاده از کلمه 'تایپ(type)' به معنی نوع داده است نه عمل فشار دادن دکمه کیبورد.
استاتیک تابپ Static type
زبانهای استاتیک به زبانهایی گفته میشود که برای ایجاد یک متغیر نیازی نیست که آن را مقداردهی کرده باشید و میتوانید آنها را قبل از مقدار دهی به صورت ضمنی ایجاد کنید. جاوا، C و ++C زبانهای برنامه نویسی استاتیک هستند. در زبان C متغیرها را میتوانید به نوع دیگری تبدیل کنید اما در واقع تبدیل نمیتوان آن را تبدیل کرد و فقط به نظر میرسد که تبدیل شده.
در زبانهای استاتیک نیازی نیست که قبل از ایجاد متغیرها آنها را مقداردهی کنید. متغیرها ممکن است در هر جای برنامه مقداردهی شوند اما برنامه نویس مجبور است قبل از استفاده آن را مقداردهی کند. کد زیر را در نظر بگیرید:
/* C code */
int num, sum; // explicit declaration
num = 5; // now use the variables
sum = 10;
sum = sum + num;
قطعه کد بالا یک نمونه کلی از اینکه یک متغیر در زبانهای برنامهنویسی استاتیک تایپ چگونه ایجاد میشود است.
داینامیک تایپ Dynamic type
زبانهای داینامیک تابپ زبانهایی هستند که حتما باید در زمان ایجاد شدن مقداردهی شوند. پایتون و php از زبانهای برنامه نویسی داینامیک هستند. کد زیر را ببینید:
# Python code
num = 10 # directly using the variable
در قطعه کد بالا به محض ایجاد شدن متغیر آن را مقداردهی کردهایم.
یک مقایسه دیگر
بسیاری از افراد تفاوت بین زبانهای استاتیک و داینامیک را در زمان بررسی نوع متغیر میدانند. از این نظر زبانهای استاتیک در زمان کامپایل(compile-time) نوع متغیرها را بررسی میکنند در حالی که زبانهای داینامیک در زمان اجرا (run-time) نوع متغیر را بررسی میکنند.
static و dynamic در مقابل weak و strong
زبانهای dynamic و static کاملا با زبانهای strong و weak تفاوت دارند و بسیاری از افراد اینها را با هم اشتباه میگیرند. اشتباه است اگر بگوییم که زبانهای dynamic و static نمیتوانند strong و weak باشند. در واقع اینها دو دسته بندی کاملا متفاوت هستند.
تایپ قوی Strong type
زبانهای تایپ قوی به زبانهای گفته میشود هر متغیر نوع مشخصی از داده را در خود نگهداری میکند. پایتون و جاوا دو زبان تایپ قوی هستند. به مثال زیر دقت کنید:
# Python code
>>> foo = "x"
>>> foo = foo + 2
Traceback (most recent call last):
File "<pyshell#3>", line 1, in ?
foo = foo + 2
TypeError: cannot concatenate 'str' and 'int' objects
>>>
در مثال بالا که از زبان پایتون بود دیدید که در خط اول مقداری که در متغیر foo قرار گرفت از نوع str بود. در خط دوم سعی کردیم مقدار 2 را که از نوع int است را به آن اضافه کنیم. همانطور که دیدید پیغام خطایی از نوع TypeError گرفتیم. پس در زبانهای تایپ قوی هر متغیر یک نوع داده خاص دارد.
تایپ ضعیف weak type
برخلاف زبانهای تایپ قوی، زبانهای تایپ ضعیف به نوع خاصی از داده محدود نیستند. دقت کنید به معنی این نیست که متغیرها نوع داده ندارند، بلکه به معنی اینست که به نوع داده خاصی محدود نیستند. زبانهای php و C از این نوع هستند:
/* PHP code */
<?php
$foo = "x";
$foo = $foo + 2; // not an error
echo $foo;
?>
در خط اول نوع متغیر foo از نوع string است. در خط دوم مقدار 2 که از نوع integer است را به آن اضافه کردهایم اما پیغام خطایی دریافت نکردیم.
پس حالا که تفاوتها را متوجه شدهاید میتوان گقت که: پایتون یک زبان داینامیک و قوی است. جاوا یک زبان استاتیک و قوی است. php یک زبان داینامیک و ضعیف است. C یک زبان استاتیک و ضعیف است.