Skip to main content
0
flutterMobile Application

เรียนภาษา Dart แบบก้าวกระโดดสำหรับคนเขียน Java

เอา Dart ไปทำอะไร

Dart นั้นเป็นภาษาโปรแกรมที่เอาไว้สำหรับสร้างแอพพลิเคชันบนแพลตฟอร์มที่หลากหลายโดยได้ทั้ง mobile, desktop, server และก็ web สิ่งที่เป็นที่นิยมที่สุดที่ทำให้คนสนใจมาเรียนภาษา Dart กันก็คือเพื่อที่จะเอาไปใช้ร่วมกับ Flutter ที่เป็นเครื่องมือช่วยสร้าง UI ของ Google ซึ่งใช้ได้ทั้งกับ Android และ iOS หรือจะเป็นใน Desktop กับ Web ก็ยังได้

ภาษา Dart นี้ถูกสร้างโดย Google และปล่อยให้ใช้งานแบบ open source ทำให้ทุกคนสามารถนำไปใช้งานได้ฟรีๆ และการที่ Dart ถูกออกแบบมาให้ใช้งานได้ง่ายและมีประสิทธิภาพแบบภาษาเชิงวัตถุอื่นๆอย่าง Java C# C++ จึงเป็นตัวเลือกภาษาที่น่าสนใจในการศึกษาเป็นภาษาแรกอีกด้วย

มาลองเขียน Dart กัน

เรามาลองดูวิธีการใช้งานภาษา Dart ตั้งแต่เริ่มต้นกันเลยดีกว่า อย่างที่บอกไปด้านบนว่า Dart เป็นภาษาเชิงวัตถุ (Object-oriented programming) ดังนั้งสิ่งที่ขาดไม่ได้เลยก็คือ class นั่นเอง โดยครั้งนี้เรามาลองดูตัวอย่างผ่านการสร้าง class Bicycle ตาม tutorial ในเว็บไซต์ของ Dart กัน สำหรับใครที่อยากลองทำตามก็เข้าเล่นได้ ที่ลิงค์นี้ https://dart.dev/#try-dart กับลิงค์นี้ https://dartpad.dartlang.org/

การสร้าง Class ฉบับ Dart

เวลาเราพูดถึงคลาสกันอย่างในภาษา Java อย่างน้อยก็ต้องมี method หรือก็คือฟังก์ชันที่อยู่ในคลาสอย่าง main อยู่แน่นอน Dart เองก็มี main อยู่เหมือนกันโดยจะเป็นฟังก์ชันอยู่ชั้นนอกสุดเลย สมมติว่าถ้าจะสั่ง print “Hello, World” ใน Dart โค้ดก็จะมีหน้าตาแบบนี้

โค้ด Hello World ใน Dart:

main() {
  print('Hello, World!');
}

ถ้าจะเทียบกับ Java ที่จะ print “Hello, World” แล้ว Dart นั้นดูสั้นและก็ง่ายกว่ากันมาก

โค้ด Hello World ใน Java:

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

เรามาเริ่มสร้างคลาส Bicycle กันจริงๆดีกว่า

class Bicycle {
   int cadence;
   int speed;
   int gear;
}

void main() {
}

จากโค้ดนี้จะเห็นว่า เรามีการประกาศคลาส Bicycle โดยมีตัวแปรที่อยู่ใสคลาสหรือ Attribute ด้วยกัน 3 ตัวคือ cadend (รอบขาในการปั่น), speed (ความเร็ว), และ gear (เกียร์) ถ้าสังเกตจะเห็นว่าการประกาศคลาสนั้นไม่ต้องระบุ public, private หรือ protected เหมือนในภาษา Java โดยใน Dart นั้นทั้งหมดจะ public เป้นค่าเริ่มต้นอยู่แล้วนั่นเอง

การสร้าง Constructor ใน Dart

เมื่อคลาสและ attribute ในคลาสก็ต้องมี constructor แน่นอนเพื่อกำหน้าค่ากับคลาสนั้นๆตอนที่สร้าง object ขึ้นมาจากคลาสนั่นเอง

Bicycle(int cadence, int speed, int gear) {
   this.cadence = cadence;
   this.speed = speed;
   this.gear = gear;
}

ซึ่งในภาษา Dart เราสามารถเขียน constructor ให้อยู่ในบรรทัดเดียวแบบนี้ก็ได้

Bicycle(this.cadence, this.speed, this.gear);

การ Instantiate Object ที่คุ้นเคย

ทีนี้เรามาลองสร้าง instance หรือก็คือ object ที่สร้างจากคลาส Bicycle กัน

var bike = new Bicycle(2, 0, 1);

ใน Dart นั้นเราสามารถเลือกที่จะใช้หรือไม่ใช้ new ตอนสร้าง instance ก็ได้  ซึ่งพอเอาไปรวมอยู่ในฟังก์ชัน main ก็จะได้โค้ดหน้าตาแบบนี้

void main() {
   var bike = Bicycle(2, 0, 1);
   print(bike);
}

ทำให้ภาพรวมคลาส Bicycle ของเราเริ่มเป็นรูปเป็นร่างแล้ว

class Bicycle {
   int cadence;
   int speed;
   int gear;
   Bicycle(this.cadence, this.speed, this.gear);
}

void main() {
   var bike = new Bicycle(2, 0, 1);
   print(bike);
}

Output:

Instance of 'Bicycle'

Read-Only Variable คืออะไร ?

Read-only variable ก็คือการทำให้ตัวแปรภายใน class เป็น private เข้าจากภายนอกคลาสโดยตรงไม่ได้นั่นเอง ในคลาส Bicycle ของเรา มาทำให้ speed กลายเป็น read-only variable กัน ซึ่งทำได้ง่ายมากๆแค่เปลี่ยนชื่อของมันเท่านั้นเอง

จาก

int speed;

ไปเป็น

int _speed = 0;

แค่เติม _ (underscore) นำหน้าชื่อ ตัวแปรนั้นๆก็จะเป็น private แล้วนั่นเอง ซึ่งพอตัวแปรเป็น private แล้วเราก็ต้องสร้าง getter ไว้สำหรับ get ตัวแปรจากภายนอกเอาไว้ด้วย เรียกใช้ได้ง่ายๆแบบนี้เลย

int get speed => _speed;

เราจะทำการเพิ่มฟังก์ชัน info ไว้ดูข้อมูลของจักรยานเข้าไปในคลาสด้วย เพื่อที่จะได้เห็นผลลัพธ์จากการสร้างคลาสง่ายๆ พอรวมเสร็จคลาส Bicycle ของเราก็จะมีหน้าตาแบบนี้แล้ว

class Bicycle {
   int cadence;
   int gear;
   int _speed = 99;

   Bicycle(this.cadence, this.gear);
   int get speed => _speed;
   String info() {
      return "This bike has: " + cadence.toString() + " cadence, "
         + gear.toString() + " gear, and " + _speed.toString() + " speed.";
   }
}

void main() {
   var bike = new Bicycle(2, 1);
   print(bike.info());
}

Output:

This bike has: 2 cadence, 1 gear, and 99 speed.

Optional Parameters เรื่องนี้สำคัญไม่แพ้กัน

สำหรับหัวข้อนี้ก็ขอเทียบกับภาษา Java เหมือนอย่างเคย ในภาษา Java นั้นมี overloading constructor หรือก็คือการมี constructor หลายตัวที่แต่ละตัวรับค่าไม่เหมือนกันเพื่อที่จะได้สร้าง instance ได้ด้วยวิธีที่แตกต่างกันได้ ใน Dart ก็ทำได้เช่นเดียวกัน อย่างคลาส Bicycle ของเราถ้าหากจะทำให้ตอนสร้าง instance เลือกที่จะระบุหรือไม่ระบุ gear ก็ได้ เราสามารถเขียนเป็น optional parameters ได้แบบโค้ดด้านล่างนี้

Bicycle(this.cadence, {this.gear = 1});

ส่วนเวลาสร้าง instance ก็ใช้งานได้แบบนี้

var bike1 = new Bicycle(2, gear: 9);
var bike2 = new Bicycle(2);
print(bike1.info());
print(bike2.info());

Output:

This bike has: 2 cadence, 9 gear, and 99 speed.
This bike has: 2 cadence, 1 gear, and 99 speed.

ได้เห็นตัวอย่างการเขียน Dart กันไปแล้ว น่าจะไม่ยากใช่มั้ยครับ ยิ่งถ้าใครเขียน Java มาก่อนละก็น่าจะ eszy สุดๆไปเลย ภาษา Dart เป็นภาษาที่น่าสนใจและมีการเติบโตอย่างต่อเนื่อง ถ้าใครสนใจก็อย่าลืมไปศึกษาเพิ่มเติมกันได้ที่เว็บ Dart นะครับ

โค้ดทั้งหมดที่เขียนมาในบทความนี้

class Bicycle {
   int cadence;
   int gear;
   int _speed = 99;

   Bicycle(this.cadence, {this.gear = 1});
   int get speed => _speed;
   String info() {
      return "This bike has: " + cadence.toString() + " cadence, "
        + gear.toString() + " gear, and " + _speed.toString() + " speed.";
   }
}

void main() {
   var bike1 = new Bicycle(2, gear: 9);
   var bike2 = new Bicycle(2);
   print(bike1.info());
   print(bike2.info());
}

reference : A tour of the Dart language

Develeper

Author Develeper

More posts by Develeper

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

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

บันทึกการตั้งค่า