آشنایی با زبان برنامه‌نویسی Scala

آشنایی با زبان برنامه‌نویسی Scala

پیش از هر چیز، باید گفت که اسکالا جزو زبان‌های برنامه‌نویسی دشوار برای یادگیری است اما اگر کسی بتواند سختی یادگیری این زبان را بر خود هموار کند، مسلماً ارزشش را خواهد داشت. در این پست قصد داریم دست به مقایسهٔ زبان‌های برنامه‌نویسی Scala و Java بزنیم به طوری که خواهیم دید با استفاده از اسکالا با تعداد خطوط کد کمتری می‌توان به همان نتیجه‌ای که برنامه‌نویسان جاوا در چندین خط کد می‌رسند، برسیم (اسکالا زبانی شییٔ‌گرا و فانکشنال است که در سال 2003 به دنیا عرضه شد و می‌توان گفت که روز به روز بر میزان محبوبیت این زبان افزوده می‌گردد و توسط شرکت‌های بیشتری مورد استفاده قرار می‌گیرد.)

آشنایی دلایل محبوبت زبان اسکالا
به طور خلاصه، می‌توان گفت که هدف از ایجاد اسکالا طراحی یک جاوای بهینه‌تر بوده و جالب است بدانید که این زبان در JVM (ماشین مجازی جاوا) اجرا می‌شود. به غیر از Scala زبان‌های دیگری همچون Kotlin و Ceylon نیز بوده‌اند که سعی کرده‌اند یک جاوای بهتر باشند اما این در حالی است که در این زبان‌ها سعی شده سینتکس تا حد ممکن نزدیک به زبان جاوا باقی بماند و صرفاً منحنی یادگیری این زبان‌ها نسبت به زبان جاوا کمی بهتر شود اما اسکالا با این ذهنیت طراحی شد که محدودیت‌های زبان جاوا رفع گردیده و توسعه‌دهندگان بتوانند با شکستن ساختارها و پارادایم‌های به کار گرفته شده در زبان جاوا، کدهای کمتر اما در عین حال بهینه‌تری بنویسند و شاید یکی از دلایل سختی یادگیری این زبان هم همین مسألهٔ ساختارشکنی بوده باشد.

مقایسهٔ سورس‌کد اسکالا با جاوا
با زبان جاوا می‌توان هرگونه اپلیکیشنی نوشت اما در عین حال تعداد خطوط کدی که در زبان جاوا برای یک برنامهٔ خاص استفاده می‌شود قابل‌مقایسه با تعداد خطوط کد در زبان اسکالا نیست! اسکالا کامپایلری بسیار هوشمند دارا است و از همین روی دولوپر نیازی ندارد تا خیلی از بدیهیات را برای کامپایلر شرح دهد و این وظیفهٔ خود کامپایلر است که حدس بزند چه چیزی مد نظر دولوپر بوده است. برای روشن‌تر شدن این مسئله، برنامهٔ Hello World را در زبان‌ جاوا مد نظر قرار می‌دهیم:

public class HelloJava {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

حال همین برنامه را در زبان اسکالا می‌نویسیم:

object HelloScala {
    def main(args: Array[String]): Unit = {
        println("Hello World!")
    }
}

می‌بینیم تفاوت چندانی مابین دو زبان وجود ندارد اما ساختار اسکالا تا حدودی ساده‌تر به نظر می‌رسد. به عنوان مثالی دیگر، می‌توان طرز ساخت یک آرایه‌ای از استرینگ‌ها را در دو زبان مقایسه کرد به طوری که در جاوا داریم:

List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");

همین آرایه را در اسکالا به صورت زیر خواهیم نوشت:

val list = List("1", "2", "3")

آنچه مسلم است اینکه در زبان جاوا ترفندهایی به منظور کوتاه کردن سورس‌کد وجود دارد اما این ترفندها جزو کاربردهای استاندارد این زبان نیستند. حال فرض کنیم لیستی از استرینگ‌هایی داریم که قصد داریم آن‌ها را در زبان جاوا به اعداد صحیح تبدیل کنیم:

List ints = new ArrayList();
for (String s : list) {
    ints.add(Integer.parseInt(s));
}

اما در اسکالا خواهیم داشت:

val ints = list.map(s => s.toInt)

اکنون زمان آن فرا رسیده که پا را کمی فراتر گذاشته و مقایسه‌ای مابین طراحی کلاس و ساخت آبجکت در زبان‌های برنامه‌نویسی جاوا و اسکالا داشته باشیم. در زبان جاوا نحوهٔ ساخت کلاس به صورت زیر است:

public class User {
    private String name;
    private List orders;
    
    public User() {
        orders = new ArrayList();
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public List getOrders() {
        return orders;
    }
    
    public void setOrders(List orders) {
        this.orders = orders;
    }
}

public class Order {
    private int id;
    private List products;
    
    public Order() {
        products = new ArrayList();
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public List getProducts() {
        return products;
    }
    
    public void setProducts(List products) {
        this.products = products;
    }
}

public class Product {
    private int id;
    private String category;
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getCategory() {
        return category;
    }
    
    public void setCategory(String category) {
        this.category = category;
    }
}

می‌بینیم که تعداد خطوط نسبتاً قابل‌توجهی وجود دارد اما نسخهٔ اسکالای این قطعه کد به صورت زیر خواهد بود که به مراتب خلاصه‌تر است:

class User {
    var name: String = _
    var orders: List[Order] = Nil
}

class Order {
    var id: Int = _
    var products: List[Product] = Nil
}

class Product {
    var id: Int = _
    var category: String = _
}

جالب است بدانید که در اسکالا می‌توان از چیزی تحت عنوان Case Class نیز استفاده کرده و کد فوق را به مراتب بهینه‌تر به صورت زیر نوشت:

case class User(name: String, orders: List[Order])
case class Order(id: Int, products: List[Product])
case class Product(id: Int, category: String)

هدف از این مقاله به هیچ وجه زیر سؤال بردن مزیت‌های زبانی همچون جاوا نیست بلکه صرفاً هدف این بود تا به معرفی زبان اسکالا و برخی از بارزترین مزیت‌هایش اشاره‌ای کرده‌ باشیم. جاوا اکوسیستم بسیار قدرتمندی در دنیای توسعهٔ نرم‌افزار دارد و مسلماً یادگیری این زبان نویدبخش آیندهٔ شغلی خوبی خواهد بود که در همین راستا می‌توانید به دورهٔ رایگان آموزش جاوا در سکان آکادمی مراجعه نمایید.

منبع


بهزاد مرادی