@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 گفته میشوند
Duck typing در زبان های دینامیک به ایده ای گفته میشه که اگر شی فقط متود در تعریفش باشه میشه فراخوانی بشه این یک شیوه رسیدن به polymorphism در زبان های دینامیک مثل روبی هستش
از مثل
If it looks like a duck and quacks like a duck, it is a duck
برداشته شده