สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial DART

L01 DART INTRO L02 DART HOWTO L03 DART GETTING START L04 DART SYNTAX L05 DART VARIABLE 01 L06 DART VARIABLE 02 L07 DART FUNCTION L08 DART OPTIONAL NAMED POSITONAL L09 DART LIST L10 DART CLASS L11 DART INHERITANCE MIXIN L12 DART EXCEPTION L13 DART GENERATOR AND ITERATOR L14 DART OPERATION

 Simple And Bug-Free Code With Dart Operators ในภาษา Dart

เรียนเขียนโปรแกรมง่ายๆกับ Expert Programming Tutor ในบท Simple And Bug - Free Code With Dart Operators


Package importing ในภาษา Dart


ขอเริ่มจากพื้นฐานที่สุดก่อน คือ การ import package รูปแบบปกติที่เราใช้ เช่น import ‘dart:math’; โดยจะเป็นการนำ package math มาใช้ ซึ่งเราก็จะเรียกใช้ทุกอย่างใน math ได้ทั้งหมด เช่น ฟังชันก์ log และ sin cos tan ตรีโกณทั้งหลาย

import 'dart:math';
main(){
 double value = log(2);
  print(value);  // 0.6931471805599453
}

ทีนี้ในหลายครั้งชื่อฟังชันก์ของ package ที่ import เข้ามา มันก็มีโอกาสซ้ำกับของเรา แถมยังอ่านยากว่ามาจากไหนกันแน่ เราสามารถเพิ่ม keyword as เพื่อตั้งชื่อให้มันได้

import 'dart:math' as MyMath;
main(){
 double value = MyMath.log(2);
  print(value);  // 0.6931471805599453
}

อีก keyword คือ show มันคือการเลือกเฉพาะ class ที่เราจำเป็นต้องใช้เข้ามา เช่น เราต้องการใช้เฉพาะ Random ใน math เราก็เลือกใช้ show Random โดยสามารถ , เพิ่มได้หลาย class

import 'dart:math' show Random,Point;
main(){
 int value = Random().nextInt(10);
  print(value);  // 0 ... 9
}

String concatenate ในภาษา Dart


การต่อ String ซึ่งใน dart ก็ยังใช้ + operator ได้เหมือนภาษาอื่นๆ อีกแบบคือการใช้ $ มาแทนใน String เลยก็ได้เช่นกัน หากเป็นกรณี instance จะต้องมี { } ครอบ

class Person{
  String name;
}
main(){
  Person person = Person();
  person.name = "Expert";
  int money = 100;
  print("${person.name} , $money"); // Expert , 100
  print(person.name + " , " + money.toString()); // Expert , 100
}

?: (Ternary Operator) ในภาษา Dart


Ternary operator คือ รูปย่อของ if ที่น่าจะคุ้นเคยกันในหลายๆภาษา เช่น php , javascript มันคือcondition? true : false

main(){
  List list = [1,2,3,4];
  String str = list.isNotEmpty ? "available" : "none";
  print(str);
}

?? (Null coalescing operator) ในภาษา Dart


ในการเขียนโปรแกรม บ่อยครั้งที่การตรวจสอบค่า null เกิดขึ้นอย่างเป็นประจำ ซึ่งมันก็เป็นโค้ดเดิมๆ อย่างเช่น if( data !== null ) ดังนั้น Null coalescing operator จึงเกิดมาเพื่อลดภาระการตรวจสอบ null ให้เหลือแค่การเอา ?? ไปไว้ด้านหลังตัวแปร ถ้าค่านั้นเป็น null ก็จะใช้ค่า default แทน

main(){
  String name;
  print(name ?? "Expert");  // Expert
}

?. (Null conditional) ในภาษา Dart


หากเราต้องการเข้าถึง field หนึ่งใน object แต่ไม่แน่ใจว่า object นั้น null หรือไม่ เราสามารถใช้ ?. มาช่วยได้

class Spacecraft{
  Astronaut astronaut;
}
class Astronaut{
  String name;
}
main(){
  Spacecraft sc = Spacecraft ();
  String astronautName = sc?.astronaut?.name ?? "Neil Armstrong"; 
  print(astronautName);  // ""Neil Armstrong"
}

??= (null coalescing assignment operator) ในภาษา Dart


ดูเหมือนเรื่องของ null จะเยอะเหลือเกิน เพราะมันคือปัญหาจริงๆ มีหลายครั้งที่เราต้องการ กำหนดค่าถ้ามันเป็น null เราก็จะใช้ if(name == null) งานซ้ำๆแบบนี้ ต้องใช้ null coalescing assignment ที่ลดรูปเหลือแค่ ??=

main(){
  String name;
  name ??= "Expert";
  print(name); // "Expert"
}

=> (Arrow notation) ในภาษา Dart

Arrow คือรูปย่อของ function/method ที่มีการทำงานบรรทัดเดียวและ return ค่า เช่น method isAlive() ที่ return true;

class Astronaut{
  bool isAlive (){
     return true;
  }
}

เราสามารถเขียนย่อๆโดยใช้ arrow ว่า isAlive() => true; ซึ่งมันก็คือการตัด { } และคำว่า return ออกให้สั้นลง อ่านง่ายขึ้น ทำให้เข้าใจได้เลยว่ามันคือ input => output

class Astronaut{
  bool isAlive () => true;
}
main(){
  Astronaut astronaut = Astronaut();
  print(astronaut.isAlive());  // true
}

.. (Cascade notation)ในภาษา Dart


Cascade notation คือการลดรูปของการ assign ค่าให้ instance จากเดิมที่เราต้องเขียน ชื่อ instance ซ้ำๆ เช่น

Person person = Person();
person.name = "Expert";
person.age = 18;
person.job ="developer";

cascade notation จะลดรูปโดยการลด การเขียนชื่อ instance ออกและใช้ . แทน รวมทั้งไม่ต้องเขียน ; ปิดท้ายแต่ละ field ด้วย เขียนครั้งเดียวตอนจบ เช่น

Person person = Person()
..name = "Expert"
..age = 18
..job ="developer"; 

ตัวอย่างด้านล่างจะเพิ่มความซับซ้อนขึ้นมาอีกนิด

class Spacecraft{
  String name;
  bool available;
  List astronauts;
}
class Astronaut{
  String name;
}
main(){
  Spacecraft sc = Spacecraft()
  ..name = "USS Discovery"
  ..available = true
  ..astronauts = List();
}

~/ (Floored integer division)ในภาษา Dart


เคยไหมที่เราต้องหารค่าที่มีทศนิยมแล้วต้องแปลง cast เพื่อให้เป็น integer ใน dart เราแค่ใช้ ~/ ก็ cast ให้อัตโนมัติ แล้วได้ integer แล้วละ

main(){
 double a =1111;
 double b =33;
  int floor = a ~/ b;
  // int floor = (a/b).toInt();
 print(floor); // 33
}

ซึ่งเทียบกับการเขียนแบบเดิมที่ใช้ toInt() ก็ดูสะดวกขึ้นเยอะ

main(){
 double a =1111;
 double b =33;
  int floor = a ~/ b;
  // int floor = (a/b).toInt();
 print(floor); // 33
}

Initializing field ในภาษา Dart


การกำหนดค่าเริ่มต้นของ class ใน constructor ที่เราพบเห็นบ่อยๆใน Java มักจะเขียนแบบนี้ คือ อธิบายครบครันเรื่อง variable type และการใช้ this เพื่อเจาะจง field ใน class

class Spacecraft {
  String name;
  bool available;
  Spacecraft(String name, bool available) {
    this.name = name;
    this.available = available;
  }
}

ใน dart ก็สามารถเขียนแบบนั้นได้เช่นกัน แต่สามารถลดทอน ให้สั้นลงเหลือแค่ this และไม่ต้องระบุ type เพราะระบุไปแล้วใน class

class Spacecraft{
  String name;
  bool available;
  Spacecraft(this.name,this.available);
}
class Astronaut{
  String name;
}
main(){
 Spacecraft sc = Spacecraft("USS Discovery" , true);
 print(sc?.name); // USS Discovery
}

Optional parameter ในภาษา Dart


​​​​​​ใน dart ไม่มี method Overloading ที่ชื่อเดียวกันมี parameter หลายแบบ แบบใน Java แต่ใน dart จะใช้ method เดียว ที่เพิ่มให้ parameter เป็น optional แทน คือการใส่ [] ให้มันและกำหนดค่า default หากไม่กำหนดจะเป็น null

class Spacecraft{
  String name;
  bool available;
  Spacecraft(this.name,[this.available = true]);
}
class Astronaut{
  String name;
}
main(){
Spacecraft sc = Spacecraft("USS Discovery");
 print(sc?.name); // USS Discovery
}

Optional named parameter ในภาษา Dart


ในหลายๆกรณี ที่ method มี optional parameter ของ method เยอะมากๆ ทำให้เราสับสนลำดับของมัน การทำ optional อีกแบบใน dart คือการตั้งชื่อให้มัน ทำให้เราสามารถสลับลำดับของ parameter ได้ โดยการกำหนดผ่านชื่อของมัน รูปแบบนี้ใน Flutter เป็นที่นิยมมาก เพราะ Widget มี field จำนวนมาก และการ custom ก็ต้องการความหลากหลายนั่นเอง

class Spacecraft{
  String name;
  bool available;
  Spacecraft({this.name,this.available=true});
}
class Astronaut{
  String name;
}
main(){
 Spacecraft sc = Spacecraft(name:"USS Discovery");
 print(sc?.name); // USS Discovery
}

สรุป
บล็อกนี้ได้สรุปพื้นฐานเรื่อง syntax และการลดรูปในภาษา Dart เอาไว้คร่าวๆครับ ซึ่งจริงๆแล้ว syntax ไม่ได้ยากเลย เพราะหลายๆอย่างมีความคล้ายกับภาษาอื่นๆอีกด้วย 
Credits

https://medium.com/@dev.n/simple-and-bug-free-code-with-dart-operators-2e81211cecfe



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา