web analytics

สรุปงาน Flutter Day 2020

สวัสดีครับ บล็อกนี้ผมจะสรุปเนื้อหาใน Livestream ของงาน Flutter Day 2020 ทั้ง 3 session ครับ งานนี้เป็นงาน livestream พูดคุยและเล่าฟีเจอร์ต่างๆใน Flutter – Dart โดยผมจะสรุปด้วยการแปลและเรียบเรียงตามความเข้าใจของผมเอง อาจจะเลือกเฉพาะจุดที่สำคัญหรือน่าสนใจมานะครับ รวมทั้งในส่วนถาม-ตอบ ผมก็จะเลือกเฉพาะคำถามที่น่าสนใจไม่ได้เอามาทุกอันเช่นกัน ขอเน้นย้ำว่าเป็นการแปลและเรียบเรียงตามความเข้าใจของผมเองนะ ผิดพลาดประการใดต้องขออภัยด้วย

Session 1 : Building beautiful UIs

เริ่มต้นคุณ Andrew Fitz Gibbon (Flutter Team) กล่าวต้อนรับ และอธิบายจุดประสงค์ของ Flutter Day ว่างานที่จะนำเสนอความสามารถใหม่ๆ อัพเดทใน Flutter จากที่ทางทีมได้พัฒนา และให้ developer มีส่วนร่วม เช่นการถาม-ตอบ ปัญหาต่างๆ โดยงานนี้จะเป็น streaming มี 3 session

CodePen.io

คุณ Zoey Fan (Product Manager, Flutter Team) เป็นพิธีกรใน session นี้ โดยแขกรับเชิญท่านแรกคือ คุณ Alex Vazquez (Co-Founder, Codepen) โดยเขาได้แนะนำ CodePen ว่ามันไม่ใช่แค่ Online Editor เท่านั้น แต่ CodePen ยังเป็น Online Social Web Community สำหรับ Front-end & Designer ด้วย และของใหม่ใน CodePen คือ Flutter Editor ที่เราสามารถเขียน Flutter และ demo ได้เลยแบบง่ายๆ แบบเดียวกับ Hot reload เลย ช่วยให้เพื่อนๆสามารถแชร์ Flutter UI ต่างๆได้ หรือติดตาม Developer คนที่สนใจได้

โดยเบื้องหลัง Flutter Editor บน CodePen ก็คือ DartPad นั่นเอง โดยคุณ Alex เล่าถึงความสนใจของเขาที่จะทำ Flutter Editor ใน CodePen ว่า เขาพร้อมจะนำเทคโนโลยีใหม่ๆเข้ามาใน CodePen เพื่อให้มีความหลากหลาย และ Flutter คือหนึ่งในสิ่งที่เขาพบว่าสุดยอดมาก ซึ่งในอนาคตทาง CodePen ก็จะเพิ่มความสามารถใหม่ๆ เช่น Error message เข้ามาใน Flutter Editor ด้วย

แขกรับเชิญท่านต่อมา คือ คุณ Mariano Zorrilla (Tech Lead, Venmo) เขาได้สร้างตัวอย่าง Flutter ใน CodePen กว่า 20 ตัวอย่างในหนึ่งเดือน เช่น แอพแชท แอพแผนที่ แอพอนิเมชันเจ๋งๆ เขาเล่าถึง passion ของเขาใน Flutter ว่าเขารู้จัก Flutter มา 2-3 ปีแล้ว และชอบแชร์ความรู้ต่างๆอยู่เสมอ โดยแอพตัวอย่างหนึ่งอาจใช้เวลาราว 10-20 ชั่วโมงในการทำเลยทีเดียว

ถาม-ตอบ

หลังจากจบ session ที่ 1 แล้วจะเป็นช่วงถาม-ตอบ ผ่าน #AskFlutter โดยผู้เชี่ยวชาญที่จะมาช่วยตอบคำถามตอบคือ คุณ John Ryan (Engineer, Flutter Team) โดยผมจะขอเรียบเรียงคำตอบตามความเข้าใจของผมนะ

สามารถเขียน Flutter โดยไม่จำเป็นต้องติดตั้งอะไรเลยได้มัย หรือเขียนแบบ online น่ะ ?

Flutter สามารถเขียนใน DartPad ได้ สามารถรัน codelab ต่างๆได้ และ CodePen ก็สามารถทำได้เช่นกัน นอกจากนี้ Flutter Team กำลังทดลองทำฟีเจอร์นี้ใน VS Code Online ด้วย แต่ว่าตอนนี้ยังบอกอะไรไม่ได้ แม้ว่าการเขียน online จะสะดวก แต่มันก็มาพร้อมข้อจำกัด เช่น debugging และหลายๆอย่างจะมีเฉพาะใน iOS Android หรือมีเฉพาะใน physical device จริงๆ

แนะนำ State management อะไรที่ในช่วงนี้ ?

ในมุมมของผม ตอนนี้เรามี best practice ในเรื่องนี้ มีบทความในเว็บไซต์ Flutter ด้วย ใช่แล้ว แนะนำ Provider สำหรับ State Management สำหรับ provide/access ข้อมูล ใน Flutter ประเด็นในเรื่องนี้ มันมี 2 แง่มุมที่น่าสนใจ คือ มี dependency อะไรบ้างที่เกี่ยวข้องกับ Provider และมี object ประเภทอะไรบ้าง เราต้องพิจารณาให้ดี

เป็นไปได้มัย ที่จะมี codebase เดียว สำหรับ responsive layout ทั้ง Mobile, Web , Desktop ?

ใน Flutter สามารถทำได้ง่ายๆ และก็มีหลายวิธี เช่น MediaQuery เรียกดูขนาดของหน้าจอแล้วเอาขนาด full screen นั้นมาคำนวณสำหรับหน้าจอ layout อีกวิธีคือการใช้ LayoutBuilder ที่เป็น widget ที่เตรียม callback เรื่องขนาดของ parent มาให้ และทั้งหมดสามารถใช้ได้ในทุก platform

อะไรคือสิ่งที่ทำให้ ฉันพิจารณาตัวเองว่าเป็น Senior Flutter Developer ?

คำถามยากจัง ฮ่าๆ ผมคิดว่าผมไม่น่าจะรู้คำตอบนะ แต่ถ้าให้ผมตอบล่ะก็ ถ้าคุณสามารถพัฒนาแอปจนสามารถ publish แอปของคุณไปที่ App Store / Play Store ได้ และ user รักแอปของคุณ มันคือความสำเร็จแล้ว นั่นคือ สิ่งที่บ่งบอกว่าเป็น Senior Developer สำหรับผมแล้วล่ะ

เราจะรับมือกับการเปลี่ยนแปลงของ syntax และ Widget อย่างไร ?

เรามี Page สำหรับ Breaking Change หรือค้นหาใน google ว่า “breaking change in flutter” โดย page อยู่ที่ flutter.dev และเราอัพเดทมันอยู่บ่อยๆ และหลายๆครั้งที่เรา deprecate บางสิ่งไป แต่ก็จะพยายามอธิบายสิ่งนั้น ประมาณว่า อย่าใช้แบบนี้เพราะ..

อยากให้ Flutter มี class สำหรับรองรับไฟล์ svg โดยตรงเลย เป็นไปได้ไหม ?

Flutter มี Github issue พูดถึงเรื่องนี้เยอะอยู่เหมือนกัน แนวทางของเราคือ แนะนำ 3rd party ที่ปัจจุบันมี community ที่ดี อัพเดทอยู่เสมอๆ svg API มันค่อนข้างใหญ่ และมีหลายๆอย่างที่ยากจะทำให้มันเสถียร เราเลยคิดว่ามันเป็นการลงทุนที่ใหญ่สำหรับทีมของเรา ที่จะต้อง support และดูแลเรื่องนี้ นอกจากนี้ก็มีเครื่องมือที่ทำได้คล้ายๆกัน เช่น Rive ที่สามารถ convert มาใช้งานใน Flutter

ทำไม ใน Firebase ถึงไม่มี doc เกี่ยวกับ Flutter เลยล่ะ แต่ตัวอย่างอื่นๆ แม้แต่ Unity ก็มี ทำไมเป็นอย่างนั้น ?

เรากำลังทำงานร่วมกับ Firebase Team กำลังทำ docs และ codelab ต่างๆ เช่น Firebase Firestore สำหรับเก็บข้อมูลใน Flutter และจะเปิดให้งานในเร็วๆนี้

ฉันสงสัยว่า BuildContext มันคืออะไร ?

ผมจะพยายามอธิบายนะ มันคือสิ่งที่ช่วยนำทาง ใน widget tree เช่นถ้าคุณมี Stateful Widget มันจะช่วยจัดการ Tree ระหว่าง parent widget และ tree ที่คุณสร้าง และถ้าผมสร้าง widget จำนวนมาก และในแอพของเรามีหลาย theme เช่น บางหน้า theme นึง อีกหน้า theme นึง คุณสามารถใช้ Theme.of ซึ่งมันคือการเรียก BuildContext สามารถช่วยชี้ไปหา parent ที่ใกล้ที่สุดว่า theme อะไร

วิธีที่ดีที่สุดที่จะ optimize รูปภาพด้วย Flutter ที่ไม่ใช่การ resize นะ คล้ายๆการบีบอัด (compression) ?

Flutter รองรับ WebP และ Flutter ก็มีความสามารถในการแยกรูปภาพ asset ตามขนาดหน้าจอ แต่ในกรณีที่เป็นรูปภาพที่อยู่บน server และมีการโหลดแบบ dynamic แนะนำให้เตรียมรูปที่บีบอัดไว้หลายๆขนาด และให้ Front-end เป็นผู้ขอตามความเหมาะสม

Session 2 : Flutter DevTools

session นี้มี คุณ Filip Hracek (Developer Advocate, Flutter Team) และ คุณ Kenzie Schmoll (Software Engineer, Flutter Team) มาร่วมพูดคุยกันเกี่ยวกับ Flutter DevTools โดยคุณ Kenzie เป็นผู้อยู่เบื้องหลังการพัฒนา DevTools เธออธิบายว่า DevTools คือ ชุดเครื่องมือสำหรับ Flutter ที่ประกอบไปด้วยเครื่องมือย่อยๆหลายตัวในนั้น เช่น ตัวช่วยการมอง layout, ตัวประเมินประสิทธิภาพ, การอ่าน memory หรือแม้แต่ตัวช่วย debugging และทั้งหมดนี้มันอยู่บน Web ซึ่งมันจะช่วยให้ developer ทำงานง่ายขึ้น

โดยตัว DevTools นี้ ก็พัฒนาด้วย Flutter Web นั่นเอง ใช่แล้วเธอ debug DevTools ด้วย DevTools ฮ่าๆ โดยวิธีการเรียกใช้ Flutter DevTools ใน Android Studio นั้นง่ายมาก แค่กดไปที่ไอคอนด้านล่าง บริเวณตรงแถบ logging

Layout inspector

มาดูปัญหาแรกกัน ที่ DevTools จะมาช่วยได้ นั่นคือ เรื่อง layout ที่ developer มักจะเจอ คือ render overflow (ไอ้แถบคาดเหลืองนั่นแหละ) ตัว Inspector จะสามารถกดดูแต่ละ widget เพื่อดู property ต่างๆได้

หรือดูเป็นภาพรวมได้ที่แท็บ Layout Explorer สามารถช่วยให้เราแก้ไขปัญหาได้ง่ายขึ้น เช่น เพิ่ม Widget Flexible เข้าไป wrap ให้ใน code อย่างไรก็ตาม เราจะต้องมีความเข้าใจก่อนว่าปัญหาคืออะไร และอะไรที่ช่วยแก้ปัญหานั้นใน code

Timeline

ปัญหาต่อมาคือเรื่องของ performance โดยมีฟีเจอร์ที่น่าสนใจคือ Track Widget Builds โดยเราสามารถกดปุ่ม track นี้และเลือก chart ตาม timeline ที่น่าจะผิดปกติ จากนั้น zoom เข้าไปเพื่อดู timeline ย่อยๆว่า widget อะไรที่แปลกๆ ในตัวอย่างนี้มี widget ตัวนึงที่ชื่อว่า MyExpensiveWidget ที่ใช้เวลาทำงานนานผิดปกติ ทีนี้เราก็รู้แล้วละว่า เราต้องไปแก้ไขที่ไหน

Performance

ปัญหาที่สามคือการ scrolling ใน ListView ที่ไม่ลื่นใหลเท่าที่ควร ในตัวอย่างนี้ คุณ Phillip บอกว่าเขามี ListView โดย item ก็มีแค่ Container และ Text มีการคำนวณนิดหน่อย ทำไม scroll แล้ว มันไม่ลื่นใหลนะ

ปัญหานี้ Timeline tool จะไม่สามารถช่วยแก้ไขได้ เพราะ timeline จะช่วยดูการทำงานใน 1 frame แต่ถ้ามีหลาย frame จะต้องใช้ Performance tool แทน เพื่อให้ดูการทำงาน CPU ว่าทำงานหนักที่ตรงไหนบ้าง ซึ่งประกอบด้วย 3 แท็บ

  1. CPU Frame chart จะแสดง chart ของการทำงานว่า CPU ใช้อะไรไปบ้าง call อะไรบ้าง
  2. Call Tree จะแสดงการ call stack ของ CPU ในรูปแบบ Top-down และแสดงเวลาการทำงานด้วย
  3. Bottom-up จะแสดงการ call stack ของ CPU โดยเรียง % ของเวลาการทำงานจาก มากไปน้อย

และแน่นอน ก็เจอตัวการแล้ว คือ method ที่ชื่อว่า fibonacci ที่กินเวลา 32% และดูเหมือนว่ามันคือ recurive เสียด้วย

ใช่แล้วปัญหาคือ method ที่ชื่อว่า fibonacci โดยใน code ก็มีการทำงานแบบ recursive เพื่อคำนวณและนำค่ามาแสดงใน sub-title (นายจะ recursive fibo ใน item แบบนี้ไม่ได้นะ)

Memory

คุณ Kenzie ยังอธิบายว่า DevTools ยังมีส่วนของการแสดง memory ด้วย สามารถดูย่อยๆในแต่ละ class ว่าถือครอง memory เท่าไหร่ เพื่อช่วยแก้ปัญหา memory เต็ม

Network

อีกฟีเจอร์ที่ developer น่าจะใช้บ่อยๆ คือ tracking network เพื่อดูว่าแอพของเราในแต่ละหน้าเรียก API อะไรบ้าง ใช้เวลาเท่าไหร่

Debugger

สามารถ debug ใน DevTools ได้เช่นกัน วิธีก็คือ mark จุดที่บรรทัดนั้นนั่นเอง

Logging

ในหน้านี้จะยก log ใน flutter มาแสดง โดยมี tag สามารถ filter ได้ง่ายขึ้น

ถาม-ตอบ

ช่วงถาม-ตอบ ของ session ที่ 2 ผู้ตอบคำถามคือ speaker ทั้งสองคน คือคุณ Filip และคุณ Kenzie จะมาช่วยกันตอบ โดยเหมือนเดิมคือผมจะเลือกเฉพาะที่น่าสนใจนะ และคำตอบผมจะสรุปและเรียบเรียงของทั้งคู่เป็นอันเดียว ยกเว้นบางอันที่ผมคิดว่าน่าสนใจจะแยกไว้ครับ

เราจะเพิ่มประสิทธิภาพให้ Flutter Web ของเราได้อย่างไรบ้าง ?

Kenzie : คำแนะนำสำหรับตอนนี้คือ ลองเปิดใช้ CanvasKit ซึ่งเป็น Skia backend drawing ยัง alpha/beta อยู่ ยังไม่สมบูรณ์ หากเปิดใช้งานจะช่วยเรื่องประสิทธิภาพได้มากๆ แต่ว่าตอนนี้เราโฟกัสไปที่ Flutter Desktop ก่อน ในอนาคตจะเพิ่มเข้ามาใน Web ด้วย

Filip : CanvasKit คือ การรัน Skia บน browser โดยพื้นฐาน แต่ก็สามารถเพิ่ม flag บางอย่างเพื่อให้มันทำงานไวขึ้น ทีนี้ผมอยากจะตอบคำถามนี้ว่า โดยทั่วไปเราน่าจะรู้แล้วว่า Flutter จะทำงานได้ช้าลงบน Web และนั่นคือความจริง เพราะมันไม่ใช่ native ยังไงล่ะ Flutter จะทำงานได้เร็วๆมากๆบน Native อย่างเช่น Desktop หรือ Mobile และมันยากมากที่จะทำแบบเดียวกันใน Web เพราะมันมี overhead เต็มไปหมดเลย แม้ว่าคุณจะใช้ Skia ผ่าน CanvasKit แต่คุณก็ยังอยู่บน Web browser ดังนั้นเราควรทำแอพ (Web) ให้มีความซับซ้อนน้อยลง ลด animation หรือแสงเงา

คุณทำ Test coverage อย่างไร ?

Test coverage คือ การ test ดูว่ามีกี่ % ที่ไฟล์หรือ code ถูก test ผมมีทั้งข่าวดีและข่าวร้ายนะ ข่าวดีคือ มี Test coverage นะ คุณแค่ flutter test –coverage ก็จะ generate ไฟล์ .lcov ให้เลย จากนั้นลองส่งมันไปที่ coveralls.io ที่เป็นเว็บบริการ continuous integration ดังนั้นคุณสามารถทำ CI/CD ซึ่งจริงๆผมได้ลองมันเมื่อ 2 อาทิตย์ก่อน โดยใช้ไฟล์ .lcov และใส่มันไปที่ plugin ของ VS Code และมันควรจะทำอย่างที่ควรจะเป็น และนี่คือข่าวร้ายคือมันยังไม่ทำงาน auto

Expanded กับ Flexible ต่างกันอย่างไร ?

Expanded widget จะบังคับ child ให้มีพื้นที่ตามสัดส่วนที่กำหนด แต่ Flexible จะอิงตามขนาดของ child

มีแผนจะเพิ่ม Widget size inspector ที่ช่วยให้รู้ขนาดของ widget ง่ายๆเช่น เอา mouse ไป hover แล้วบอกขนาดของ widget ?

ฉันเห็นด้วยมันน่าจะมีประโยชน์ และจะทำเพิ่มในอนาคตอย่างแน่นอน

เราจะลดขนาดของแอปได้อย่างไร ?

มีเครื่องมือที่จะช่วย analyse ว่าอะไรที่ทำให้ขนาดของแอปใหญ่ โดยปกติขนาดของแอป Flutter จะเริ่มต้นอยู่ที่ราวๆ 6.5 MB แต่ถ้าแอปของคุณ 100 MB เราต้องมาดูแล้วละว่าปัญหาคืออะไร เป็นไปได้ว่ามันมาจาก asset ลองดูว่าลดมันได้ไหม หรืออีกวิธีการหนึ่งคือใช้ flavor หรือเปลี่ยนมาใช้การโหลดรูปภาพ assets ผ่าน back-end แทน

อยากให้คุณแนะนำ State Management ในปี 2020 ?

Kenzie : สำหรับ DevTools เราใช้ ValueNotifier และ ValueListenableBuilder เยอะมาก และเราพยายามทำ code ให้อยู่ในรูปแบบ MVC โดย controller จะมี notifier ที่คอยรอการทำงานจาก UI และใน ValueListenableBuilder มันก็ทำงานได้ดีนะ เราไม่ได้ใช้ dynamic data มากนัก เพราะจริงๆเราไม่มี user input สักเท่าไหร่ ข้อมูลส่วนใหญ่ดึงมาจาก การรันของ Dart VM

Filip : โดยเคสส่วนใหญ่ ผมยังคงแนะนำ Provider นะ มันใกล้เคียงกับ ValueNotifier แต่มันก็ขึ้นอยู่กับประเภทแอปของคุณ ซึ่งจริงๆมีหลายสิ่งที่ควรนำมาพิจารณาด้วย เช่น การทำ UI, การทำ features, ทีม มันพูดยากว่าอะไรเหมาะกับ state management ไหน สำหรับ Flutter เพราะแต่ละแอปมีสิ่งที่แตกต่างกัน มันยากสำหรับการตัดสินใจของ developer ผมคิดว่ามันไม่ใช่ไอเดียที่ดีที่จะพยายามโฟกัสมาที่เรื่องนี้มากเกินไป มันไม่ใช่ว่าแอปนี้ไม่ได้ใช้ Provider มันแย่นะ ไม่ใช่อย่างนั้น เพราะเทคนิคใน Flutter หลากหลายมาก และมีหลายแอปที่ประสบความสำเร็จด้วยเทคนิคที่แตกต่างกัน สิ่งสำคัญคือพวกเขารู้เหตุผลและแนวทางของ state management ที่เขาเลือก ดังนั้น Provider เป็นสิ่งที่ควรรู้ หากยังไม่แน่ใจว่าควรใช้อะไรดี แต่ถ้าคุณมีเหตุผลอื่นๆที่ดีกว่า ก็อย่าผูกติดตัวเองกับ Provider หรืออะไรก็ตาม อย่ากลัวที่จะลองมัน ผมคิดว่าเรื่องนี้เป็นเรื่องที่ยากและมันจะยากตลอดไป

คิดอย่างไรกับ Progressive Web App vs Flutter Web ?

Flutter Web สามารถทำ PWA ได้ แต่นั่นไม่ใช่วิธีที่ดี ถ้าคุณโฟกัส PWA หรือมี content หนักๆ เยอะๆ คุณไม่จำเป็นต้องใช้ Flutter เพราะมันจะเหมือนมีสิ่งที่เปลือง มากเกินจำเป็น ผมคิดว่าหากจะเลือก Flutter Web สำหรับตอนนี้ คือคุณมีแอปอยู่แล้วและอยากนำบางส่วนหรือทั้งหมดมาเป็น web แต่หากคุณต้องการจะทำ web โดยตรง อาจมีตัวเลือกอื่นที่ดีกว่า

Session 3 : Dart

คุณ Kevine Moore (Product Manager, Dart Team) และ คุณ Bob Nystrom (Software Engineer, Dart Team) นำอธิบายเรื่อง Null-Safety ของใหม่ใน Dart โดยสำหรับหัวข้อนี้ผมขอเขียนแบบสรุปๆเลยนะ

null-safety ก็ตามชื่อมันเลยคือจะภาษาจะช่วยตรวจสอบให้เลยจาก data type ที่เราประกาศ ช่วยเช็ค null

หากเราต้องการให้ตัวแปรนั้น สามารถมีค่าเป็น null ได้ ก็แค่เพิ่ม ? ไปด้านหลัง เช่น int?

ทีนี้กรณีที่เราจะเอาตัวแปรนั้นไปใช้ และมันมีโอกาสเป็น null เช่น การเอาไปต่อ String ตัวภาษามันก็จะไม่ยอม

เราจะต้อง mark ว่าถ้าเป็น null เรายอมให้ทำงานได้ โดยการเพิ่ม ! ไปด้านหลังตัวแปรนั้น

ในบางกรณีที่ตัวแปรนี้ของเราจะไม่ null แน่ๆ แต่ตอนแรกนี้เราจะยังไม่กำหนดค่าเริ่มต้นให้มัน แน่นอนว่าการใช้แบบ ? ก็จะไม่ถูกหลักการเพราะมันไม่ null

เราสามารถเพิ่ม late ไปที่หน้า data type ได้ แบบนี้

โดย Dart null-safety คุณ Bob บอกว่าเราอาจต้องแก้ code เดิมบ้างแต่ก็สามารถเลือกใช้โหมด Mix ก่อนก็ได้ สำหรับเรื่อง Null-Safety แนะนำให้ไปลองเล่นใน Dartpad ดูครับ มีตัวอย่างและคำอธิบาย
https://nullsafety.dartpad.dev/

ถาม-ตอบ

ช่วงถามตอบ แขกรับเชิญมาตอบคำถาม มี 2 ท่านคือคือ คุณ John Ryan (Engineer, Flutter Team) และคุณ Michael Thompson (Product Manager, Dart Team) โดยคุณ Michael จะช่วยตอบเกี่ยวกับ Dart โดยเฉพาะ คำถามใน session นี้มีเรื่องทางเทคนิคพอสมควร

ฟีเจอร์ใหญ่ถัดไปหลังจาก Null-Safety ของ Dart คืออะไร ?

Michael : ถ้าคุณลองเข้าไปที่ Project ใน Github repo ของ Dart ในนั้นจะมีหัวข้อ language funnel สำหรับให้ผู้ที่สนใจ dart สามารถเพิ่มคำแนะนำฟีเจอร์ใหม่ๆในนี้ได้ ซึ่งในตอนนี้ก็มีหลายสิ่งที่เราคิดว่าน่าสนใจ เช่น type aliases, multiple returns

ทำไม Dart ไม่มี Multi-threading implementation แบบจริงๆ นั่นเป็นเหตุผลที่ทำไม Dart ถึงรันใน Multi-core ไม่ได้ ?

Michael : Multi-threading เป็นหนึ่งในเรื่องที่ซับซ้อนมากๆๆ ใน Computer science ตอนที่เราออกแบบ Dart เมื่อนานมาแล้ว เราไม่ได้คิดซับซ้อนขนาดนั้น แล้วอะไรใน Dart ที่นำไปใช้ใน multiple cores ล่ะ? เรามีสิ่งที่เรียกว่า isolate มันจะไม่แชร์ State คุณจะไม่เจอปัญหา synchronization

อยากให้แนะนำ Dart back-end ?

Dart สามารถนำมาใช้เขียน back-end ได้ แนะนำ package ที่ชื่อว่า Shelf เป็น Web Server Middleware และ Angel เป็น Dart backend framework

เราสามารถเอา Function มา equal กันได้ไหม func1 เทียบกับ func2 ว่าเท่ากัน ?

Michael : เมื่อก่อนเราไม่ support เรื่องนี้ แต่ตอนนี้ support แล้ว เราสามารถ compare top-level function หรือ static function ได้

ใน Dart จะมี destructor ไหม ?

Michael : เราจะยังไม่ทำในตอนนี้ เพราะว่าสุดท้ายแล้ว Garbage collector รู้ว่าจะทำงานอย่างไร

ทำไม data type เช่น String ถึงขึ้นต้นด้วยพิมพ์ใหญ่ แต่ตัวอื่นๆ int num เป็นตัวเล็ก ?

ดูเหมือนมันจะเป็นความลับ ไม่มีใครรรู้

จบแล้ว

Flutter Day 2020 เป็นงานสั้นๆ แบบ livestream ให้เห็นฟีเจอร์ของใหม่ที่เกี่ยวกับ Flutter เช่น CodePen, DevTools , Dart หากมีเวลาอยากให้ลองดูคลิปเต็มๆครับ ใช้เวลาไม่ถึง 3 ชม. เพราะสรุปในบล็อกนี้ผมแปลและเรียบเรียงตามความเข้าใจของผมเอง

สุดท้ายนี้ งานนี้ทำให้ผมอยากลอง Dart back-end แหะ ผมยังไม่เคยลองเล่นเลย ไว้จะไปลองเล่นแล้วจะมาเขียนแชร์ให้อ่านกันนะครับ

ขอบคุณผู้อ่านครับ และผู้ที่ติดตามครับ (:
ติดตามผมได้ที่เพจ benzneststudios