เมื่อ Android developer ลองเรียน ภาษา Dart

android-ภาษา-dart

เมื่อไม่นานมานี้ผมได้ลองเรียน Flutter Course จาก Website appbrewery.co ในชื่อ Course “The Introduction to Flutter Development with Dart.” โดยภาษาที่ใช้ในการเขียน Flutter ก็คือภาษา Dart ในบทความนี้ผมเลยอยากมาพูดถึงภาษา Dart ในมุมมองของ Android developer ซึ่งทำงานกับภาษา Kotlin โดยส่วนใหญ่ โดยผมจะกล่าวถึง Syntax ของ ภาษา Dart เป็นหลัก

Syntax

ก่อนหน้าที่ผมจะใช้ภาษา Kotlin นั้น ผมเคยใช้ภาษา Java ในการเขียน Android มาก่อน ความรู้สึกแรกที่ได้เห็นภาษา Dart และลองเขียนดู คือ Syntax มันดูไม่แปลกตานัก โดยจากความเห็นส่วนตัวของผมภาษา Dart นั้นดูคล้ายกับ Java มากกว่า Kotlin แต่ถ้าจะพูดให้ชัดเจนขึ้นมากอีกหน่อยผมว่า Style ของ Syntax ในภาษา Dart นั้นอยู่ระหว่าง Java กับ Kotlin โดยผมยังต้องใส่  Semi colon (;) ในภาษา Dart อยู่แต่ก็ไม่ได้ถือเป็นปัญหาอะไรสำหรับผม

อะไรที่ไม่มีใน Dart เมื่อเทียบกับ Kotlin

ผมคิดว่าในปัจจุบันนี้เป็นเวลาดีที่จะเริ่มเรียนภาษา Dart เมื่อเทียบกับเมื่อ 2 ถึง 3 ปีที่แล้ว Version ปัจจุบันของ Dart นั้นได้พัฒนาไปมากเมื่อ Version 1.x เช่น การมี Extension method และ เรื่องของ Null safety แต่ว่าเรื่องของ Null safety นั้นยังถือว่าเป็น Experimetal feature.อยู่คือยังไม่แนะนำให้ใช้บนโค้ดที่ขึ้น Production จากมุมมองของคนที่เขียน Kotlin เป็นงานหลักพอเปลี่ยนมาเขียนภาษา Dart ก็รู้สึกคิดถึงบาง feature ของ Kotlin ที่ไม่มีใน Dart เล็กน้อย

ไม่มี Data class: ในภาษา Dart เวลาที่เราต้องจัดการกับ Model class ต่างๆ เราต้อง override method เหล่านี้ด้วย equals, toString และ  hashcode ถ้าไม่อยาก override เองก็ต้องใช้ package thrid party เสริมเอา

Sealed classes: นี่เป็นหนึ่งใน feature ที่ผมชอบมากในภาษา Kotlin โดยเราสามารถ define type ในรูปแบบของ class ได้ จะเรียกว่าเป็น. enum ที่ยกระดับให้มีความพิเศษขึ้นมาก็ว่าได้ ถ้าใครได้ลองใช้แล้วรับรองว่าติดใจ โดยใน Dart ก็ต้องใช้ enum

อย่างไรก็ตามการจะเทียบ ภาษา Dart กับ ภาษา Kotlin ทีละจุดก็คงจะไม่ยุติธรรมนัก เพราะ ภาษา Dart ไม่ได้จะทำตัวเป็น Kotlin 2 ที่กล่าวถึงไปก็เพียงอยากจะให้ความเห็นในมุมมองของ Developer ที่คุ้นเคยกับภาษา Kotlin มากเท่านั้น ไม่ได้จะบอกว่าภาษาไหนดีกว่ากัน

หน้าตาของ Syntax เบื้องต้น

ในส่วนต่อไปจะขอพูดถึงไวยกรณ์ของ ภาษา Dart ในมุมมองของคนที่คุ้นเคยกับภาษา Kotlin โดยจะขอไม่พูดถึง Control flow statement เช่น if, for, while เพราะว่าไม่ได้มีอะไรแตกต่างกับทาง Kotlin นัก

Variables

ไม่ต่างกับ Kotlin Dart นั้นเป็นภาษาซึ่งเป็น type-safe และ ยังมี type inference feature ทำให้เราไม่ต้องประกาศ type ของตัวแปรตรงๆก็ได้ และการประกาศตัวแปรก็ใช้ keyword var ในการประกาศ

var platform = 'Android';

ตัวแปรใน Dart สามารถเป็น Dynamic type ได้ด้วยโดยการใช้ dynamic keyword

dynamic platform = 'Android';

หรือจะระบุ type ของตัวแปรตรงๆเลยก็ได้

String platform = 'Android';

ในภาษา Dart นั้นไม่มีคอนเซปต์ของ var หรือ val เหมือนในภาษา Kotlin ถ้าจะประกาศตัวแปรที่ไม่สามารถเปลี่ยนแปลงได้ให้ใช้ const หรือ final keywords

final platform = 'Android';
const version = '1.0';

โดย const keyword นั้นสามารถใช้เพื่อประกาศ constant value ได้ด้วย

var array = const []

Visibility Modifier

ส่วนนี้จะต่างกับภาษา Java และ ภาษา Kotlin. เพราะ ภาษา Dart ไม่มี keyword เช่น public, protected หรือ private การจะประกาศตัวแปรให้เป็น private นั้นเราจะใส่ underscore(_) ไว้ด้านหน้าตัวแปร เป็น prefix ของตัวแปรนั้นๆ

 int _questionNumber = 0;

  List<Question> _questions = [
    Question('Question1', true),
    Question('Question2'.', false),
    Question('Question3.', true)
];

Functions

function ในภาษา Dart นั้นค่อนข้างจะเหมือนจะเหมือน method ในภาษา Java แต่เราสามารถเลือกที่จะไม่ใส่ return type ได้

bool isAndroidVersion(String atomicNumber) {  return _androidVersions[atomicNumber] != null;}
isAndroidVersion(String atomicNumber) {  return _androidVersions[atomicNumber] != null;}

Function ในภาษา Dart นั้นมี optional parameters, default parameter values ด้วย สามารถดู Syntax ได้ ที่นี่  

Lambda

เราสามารถส่ง anonymous functions เป็น argument. ได้ในภาษา Dart แต่ shorthand syntax จะต่าง Kotlin โดยเปลี่ยนจาก -> เป็น =>.

var androidVerions = ['Cupcake', 'Donut', 'Eclair', 'Froyo', 'Gingerbread', 'Honeycomb', 'Ice Cream Sandwich', 'Jelly Bean', 'Kitkat', 'Lollipop', 'Marshmallow'];
androidVersions.where((name) => name.contains('lol')).forEach(print);

Classes

ทุกๆ class ในภาษา Dart นั้นเป็น instance ของ Object โดยตัว class ก็ไม่ได้มีอะไรแตกต่างจาก class ของ object-oriented language ทั่วไปนัก แต่สิ่งหนึ่งที่แตกต่างออกไปคือ ในภาษา Dart นั้นมี  named constructor ปกติแล้วเนี่ยในภาษา Kotlin เราจะใช้ Primary constructor เป็นหลักและแทบจะไม่ได้ใช้ Secondary constructor เลยด้วยซ้ำ แต่ในภาษา Dart เราสามารถมีได้หลาย Constructor และยังตั้งชื่อให้กับ Constructor นั้นๆได้ด้วย

class Point {
  double x, y;

  Point(this.x, this.y);

  // Named constructor
  Point.origin() {
    x = 0;
    y = 0;
  }
}

Extension methods

จุดนี้จะเหมือนกับในภาษา Kotlin ถ้าใครเคยใช้ Extension functions มาคงจะรู้ว่าพอเริ่มใช้แล้วมันสะดวกสบายแค่ไหน ผมคงจะเศร้าเลยถ้าไม่มี Extension method ใน ภาษา Dart โดยการประกาศ Extension method ในภาษา Dart นั้นจะต่างจาก ภาษา Kotlin เล็กน้อย

extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }

  double parseDouble() {
    return double.parse(this);
  }
}

สรุป

และนี่คือการเปรียบเทียบระหว่างภาษา Dart และ Kotlin โดยคร่าวๆ ผมอาจไม่ได้ครอบคลุมครบทุกจุด แต่ผมพยายามจะเขียนสิ่งแรกๆที่เข้ามาในหัวตอนเริ่มเห็น Syntax และไวยกรณ์ของภาษา Dart โดยในบทความนี้ผมไม่ได้กล่าวถึงเรื่อง Asynchronous programming ของ Dart เพราะว่ารายละเอียดจะค่อยข้างเยอะไว้จะพูดถึงในบทความต่อๆไป โดยรวมหลังจากที่ผมมองภาษา Dart คร่าวแล้ว ผมคิดว่าผมสามารถทำงานกับภาษา Dart ได้อย่างมีความสุขแหละ

บทความอื่นๆ

Leave a Comment

Your email address will not be published. Required fields are marked *