فرق بین زبان ها از نظرسیستم Type

@adib خواستن این مطلب توضیح بدم
سیستم type زبان ها دو خاصیت مهم دران
یکی اینکه آیا پس از ساخته شدن داده تایپ اون ستاتیک باقی میمونه و قابل تغییر نیست یا اینکه در هر جای برنامه میشه تایپه داده تغییر کنه

زبان هایی که اجازه تغییر تایپ داده رو پس از ساخت نمی دهند Statically Typed گفته میشوند و زبان هایی که این تغییر امکان پذیره Dynamically Typed گفته میشوند

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

var number: Int = 5
number = "sss"
<console>:12: error: type mismatch;
 found   : String("sss")
 required: Int
       number = "sss"
                ^

روبی نمونه زبان دینامیک که کده زیر کاملا نرماله

number = 5
number = "sss"

و خاصیت دوم اینکه آیا فقط داده هایی که یک تایپ دارن باهم مقایسه پذیرند

به زبان هایی که فقط اجازه میدهند داده های هم تایپ مقایسه شوند Strongly Typed
مثلا روبی به این گونه هاست و کد زیر خطا میده

"1" + 2
Traceback (most recent call last):
        3: from /Users/samdvr/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
        2: from (irb):1
        1: from (irb):1:in `+'
TypeError (no implicit conversion of Integer into String)

اما جاواسکریپت که اجازه این عمل را میده Weakly Typed گفته میشوند

> "1" + 2
'12'
10 پسندیده

ممنون از توضیحات کاملتون
فقط یک سوال
اینجا منظور شما از

تایپ قوی هست؟
و از

تایپ ضعیف هست؟
منظورم اینه که این یک مشکل و یک ضعف حساب میشه در یک زبان؟

میشه توضیح بدین در چه زمینه هایی وقتی برنامه می نویسیم باید در انتخاب زبان تایپ سیستم اون زبان رو هم گزینه ی مهمی در نظر بگیریم

1 پسندیده

همون طور که توضیح داده شد weak منظور از نوع مقایسه دو داده هستش ربطی به ضعیف بودن خوده زبان نداره

این انتخاب سلیقه ای زبان های داینامیک اصولا دارای قابلیت های متا پروگرامینگ بهتری هستند
و زبان های ستاتیک پرفورمنس بیشتری دارن و خطا در آنها کمتره

4 پسندیده

آخه دوستی بود که هر زبانی که Type-safety ای در حد اسکالا نداشت رو اصلا بعنوان زبان برنامه نویسی حساب نمی کرد :expressionless:

هر زبانی برای یک کاری ساخته شده کلی گرایی این طوری نشانگر تعصب افراده

5 پسندیده

اون duck typing ای که میگن با اینها ارتباط داره؟ اگه داره رابطش باویژگی های Statically Typed و Dynamically Typed و Strongly Typed و Weakly Typed چیه؟

Duck typing در زبان های دینامیک به ایده ای گفته میشه که اگر شی فقط متود در تعریفش باشه میشه فراخوانی بشه این یک شیوه رسیدن به polymorphism در زبان های دینامیک مثل روبی هستش
از مثل
If it looks like a duck and quacks like a duck, it is a duck
برداشته شده

2 پسندیده