استاتیک تایپ و داینامیک تایپ در زبان های برنامه نویسی و بیشتر

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