چرا باید 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 بپردازیم. این زبان در حال حاضر توسط شرکت های بزرگی همچون لینکدین، توییتر، فوراسکور و انتشارات گاردین استفاده می شود.

Why Should I Learn Scala?

0


بهزاد مرادی

از جمله علائقم می‌شه به نشر علم،‌ سرمایه‌گذاری روی نسل آینده، برنامه‌نویسی به خصوص زبان PHP و جامعهٔ اپن‌سورس و همچنین راه‌اندازی استارتاپ و کارآفرینی اشاره کرد و اعتقاد دارم که سکان آکادمی می‌تونه بستری باشه که از اون طریق به علائقم جامهٔ عمل بپوشونم!






  • واحد پورحیدر در تاریخ: 1394/10/09

    سلام به دوستان عزیز سکان آکادمی و مخصوصا آقای مرادی عزیز، به نظر شما بعد از جاوا میشه این برنامه رو به آسونی یاد گرفت؟

    بهزاد مرادی در تاریخ: 1394/10/09

    سلام. ممنون از شما آقای پورحیدر عزیز
    باتوجه به این که زبان اسکالا برگرفته از جاوا است به نظر می رسه که مشکل چندانی وجود نداشته باشید اما پیش از این کار، ببینید که آیا باز کار آن در ایران خوب است یا خیر!

    واحد پورحیدر در تاریخ: 1394/10/11

    ممنون از جوابتون، حقیقتش من از 3ماه پیش جاوا رو با آموزش های بی نظیر شما شروع کردم و میخواستم اینو بدونم که با یادگیری جاوا واقعا نیازی هست که اسکالا رو هم یاد بگیرم یا نه، باز هم از زحمات بی نظیر سکان آکادمی و تلاش ها و آموزش های فوق العاده شما متشکرم.

    بهزاد مرادی در تاریخ: 1394/11/02

    راستش با توجه به اینکه بنده چند وقتی است که از جاوا فاصله گرفته ایم، اطلاعاتم ممکن است خیلی آپ تو دیت نباشد. لذا بنده را از اظهار نظر بیشتر در این حوزه عفو بفرمایید.

  • soroush.8 nazari در تاریخ: 1394/10/10

    سلام آقای مرادی . عالی بود .
    فقط یه سوال ... با این اسکالا (scala) میشه تمام کارهایی که با جاوا انجام میدادیم رو انجام بدیم ؟
    مثلا کد نویسی برای اندروید ؟ اگه برای اندروید هم بشه کد نوشت ، دیگه کمو کسریه دیگه ای نداره ؟
    با تشکر

  • AliJCVD در تاریخ: 1394/10/14

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

  • حامد در تاریخ: 1394/11/02

    سلام.جالب ود.یک سوالی داشتم.من چه زبان برنامه نویسی رو یاد بگیرم تا در شهر بزرگی مثل تهران بتونم کار پیدا کنم ؟ آقای مرادی و آقای پورحیدر و بقیه دوستان لطفا راهنماییم کنید .کدوم زبان در تهران بازار کارش خوبه و میشه کار پیدا کرد؟

    بهزاد مرادی در تاریخ: 1394/11/02

    سلام. حامد جان شما اگر اچ تی ام ال و سی اس اس هم بلد باشید اما در این دو حوزه حرفه ای باشید، می توانید در هر جایی استخدام شوید. اول تکلیف خودتون رو مشخص کنید که به کدام حوزه از برنامه نویسی -طراحی سایت، فرانت اند، بک اند، توسعه ی اپ موبایل، برنامه های دسکتاپ و ...- علاقمندید، سپس زبان مورد نیاز آن حوزه را شروع به یادگیری کنید و سعی کنید به فردی No 1 در آن حوزه مبدل شوید. مسلما این کار است که دنبال شما خواهد آمد نه این که شما به دنبال کار بروید.
    امیدوارم کمکی کرده باشم.

  • حامد در تاریخ: 1394/11/03

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

    ادمین سایت در تاریخ: 1394/11/03

    سلامت باشید

  • حامد در تاریخ: 1394/11/03

    آقای مرادی یه سوال داشتم و اون اینه که آیا باید دوره مقدماتی جاوا رو یاد بگیرم یا میتونم مستقیم برم به آموزش آندروید ؟ در حال حاضر من تقریبا نصب آموزش مقدماتی جاوا رو طی کردم و یاد گرفتم

    Sina Deuxshiri در تاریخ: 1394/11/03

    سلام
    ابتدا دوره مقدماتی و یاد بگیرید و بعد برید سراغ اندروید. همین روندی و که ادامه می دین و ادامه بدین. موفق باشید.

    بهزاد مرادی در تاریخ: 1394/11/03

    سلام
    دوره ی جاوا را تا سر فصل پانزدهم ادامه دهید.

  • حامد در تاریخ: 1394/11/06

    دوباره سلام دوستان.من میخام زبان انگلیسی یاد بگیرم.در حال حاضر هم امکان اینکه به کلاس زبان برم وجود نداره.میخواستم منبعی معرفی کنید تا دامنه لغاتم رو افزایش بدم و بعدا به فکر گرامر و مکالمه برم یا در کل برای اینکه من زبان یاد بگیرم چه روش و منبعی رو پیشنهاد میکنید؟همچنین استاد مرادی هم تو آموزش هاشون گفتن که به زبان انگلیسی آشنایی داشته باشیم بنابراین من بیش از پیش جدی تر شدم.همچنین در حال حاضر 23 سالم هست.

    ادمین سایت در تاریخ: 1394/11/06

    کاربر عزیز سلام
    به نظر می رسد که جای مناسبی برای مطرح کردن سوال خود انتخاب نکرده اید و امکان دیده شده سوال شما بسیار پایین است. به هر حال، امیدواریم به جواب خود برسید

    با تشکر
    ارادتمند
    تیم سکان آکادمی

    بهزاد مرادی در تاریخ: 1394/11/06

    سلام به مقاله ی http://goo.gl/3CwyeB مراجعه نمایید. در این مقاله ۲۰۰۰ واژه ی پرکاربرد زبان انگلیسی که در ۸۰ درصد مواقع به کار می روند معرفی شده.

  • حامد در تاریخ: 1394/11/06

    ممنون آقای مرادی .از ادمین سایت هم معذرت میخام آره جای خوبی برای سوال نیست ولی چاره ای نبود.دیگه پرسیده نمیشه.

    بهزاد مرادی در تاریخ: 1394/11/06

    خواهش. امیدوارم کمکی کرده باشم.

  • جعفر در تاریخ: 1394/12/28

    سلام به همه
    من تازه میخوام شروع کنم به یادگیری اندروید ولی برای مقدمه باید جاوا یا اسکالا رو یاد بگیرم با سوالاتی که دوستان پرسیدن برام سوال شد که برای مقدمه اسکالا یاد بگیرم یا جاوا.میدونم که کیفیت خط کد نوشتن در برنامه از لحاظ کوتاه بودن برای برنامه نویس اهمیت زیادی داره مخصوصا زمانی که برنامه با خطا مواجه میشه و هر چه کوتاه تر و تمیزتر نوشته شده باشه زودتر اشکالاتش رفع میشه؟؟؟؟
    ممنون از سایت خوبتون

  • جعفر در تاریخ: 1394/12/29

    ایا وسیله ایی برای تولید فایلهای نصبی اندروید با استفاده از زبان اسکالا وجود دارد؟

    یا روشی که بتوان با اسکالا برای اندروید برنامه بنویسم؟؟؟
    ممنون میشم مشاوره بدین.

  • Maziyar در تاریخ: 1395/06/29

    جاوا انعطاف بیشتری داره میتونی کداشو بخونی ولی این همه شو کرده تویه خط آخه اصن آدم نمیفهمه چی به چیه

  • Shayan در تاریخ: 1395/09/23

    جالبه در این مقاله شما هیچ اشاره ای به جنبه functional این زبان یا functional programming نکردید. به نظرم صحبت کردن راجع به این زبان بدون اشاره به functional programming غیر ممکنه.

از طریق این فرم، می توانید بدون ثبت نام نظر دهید و یا اگر قبلا ثبت نام کرده اید، با ورود ناحیه ی کاربری می توانید علاوه بر ثبت نظر، به مدیریت نظرات خود نیز بپردازید.
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)