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

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

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

اسکالا برای اولین بار در سال 2003 به دنیا عرضه شد که جزو زبان‌های شیٔ‌گرا و فانکشنال بسیار دقیق و منطقی دنیا محسوب می‌شود. به هر حال، می‌توان گفت که از زمان ابداع تاکنون همین سال‌های اخیر بوده که کمک به رشد و محبوبیت بیشتر این زبان کرده است اما می‌بایست ببینیم که دلیل این محبوبیت چه بوده است؟

آشنایی دلایل محبوبت زبان اسکالا نسبت به جاوا
به طور خلاصه، می‌توان گفت که هدف از ایجاد اسکالا، طراحی یک جاوای بهینه‌تر بوده است. جالب است بدانید که این زبان در JVM (ماشین مجازی جاوا) اجرا می‌شود. به غیر از اسکالا، زبان‌های دیگری همچون 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)

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

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)

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

منبع