Slide 1

Slide 1 text

Dart for Android Devs FlutterͱΓ͋͑ͣ΍͍͚ͬͯΔΨΠυ 2018/06/26

Slide 2

Slide 2 text

Shigehiro Soejima Android @ DeNA @highballegg Flutter Meetup Tokyo shibuya.apk

Slide 3

Slide 3 text

• σʔλܕ • ม਺ • ੍ޚจ • ྫ֎ॲཧ • Ϋϥε • ؔ਺

Slide 4

Slide 4 text

DartPad https://dartpad.dartlang.org/

Slide 5

Slide 5 text

σʔλܕ • numbers • strings • booleans • lists • maps • ϓϦϛςΟϒܕͳ͠

Slide 6

Slide 6 text

σʔλܕ numbers • int int x = 1; int hex = 0xDEADBEEF; • double double y = 1.1; double exponents = 1.42e5; int x = 4 / 2; // error int y = 5 ~/ 2; // y = 2 • num: int or double num z = 4 / 2; // z = 2.0 (double) z = 2; // z = 2 (int), no error

Slide 7

Slide 7 text

σʔλܕ strings • UTF-16 • Singe/Double ΫΦʔτͲͪΒͰ΋Մ var str1 = ‘Hello world!’; var str2 = "Hello world!”; • Raw จࣈྻ var raw = r’\t\t\t'; print(raw); // \t\t\t

Slide 8

Slide 8 text

• ࿈݁ (վߦɺϒϥϯΫɺʴΛ࢖ͬͨ3௨Γ) var s1 = 'Hello ' "world!"; print(s1); // Hello world! var s2 = 'Hello ' "world!"; print(s2); // Hello world! var s3 = 'Hello ' + "world!"; print(s3); // Hello world! σʔλܕ strings s1, s2, s3ͷग़ྗ݁Ռ͸͢΂ͯಉ͡ɻ

Slide 9

Slide 9 text

• 3࿈ΫΦʔτʢ’’’΋͘͠͸”””ʣͰғΉ͜ͱͰෳ਺ߦΛ ··දݱՄɻ var str = '''Hello world!'''; print(str); var x = 3; print("number=$x"); // number=3 var str = "Hello world!"; print("length=${str.length}"); // length=12 • ิؒ σʔλܕ strings

Slide 10

Slide 10 text

σʔλܕ bool • true / false • Javaͱಉ͘͡boolͷtrueͷΈ͕trueɻͦΕҎ֎͸͢΂ͯfalseɻ

Slide 11

Slide 11 text

σʔλܕ list = array var list = [1, 2, 3, 4, 5]; print(list[0]); // 1 (index starts at 0) list[0] = 0; print(list); // [0, 2, 3, 4, 5] list[0] = 2.0; // error var list2 = const [6, 7, 8, 9, 0]; const list3 = [6, 7, 8, 9, 0]; • ఆ਺ʹ͢Δʹ͸constΛ͍ͣΕ͔ͷํ๏Ͱ෇͚Δɻ

Slide 12

Slide 12 text

σʔλܕ map var map1 = Map(); // new is optional map1[0] = "zero"; map1[1] = "one"; const map4 = {0: "zero", 1: “one"}; var map3 = const {0: "zero", 1: "one"}; • constԽ͸Listܕʹಉ͡ɻ var map2 = { "cero": "zero", "uno": "one", "dos": "two"}; • key-valueϖΞͰͷఆٛ΋Մೳɻ

Slide 13

Slide 13 text

ม਺ɾఆ਺ var num1 = 1; final num3; const num4 = 4; int num2 = 2; final int num5; const int num6 = 6; • var ΋͘͠͸໌ࣔతʹܕΛ༩͑ͯఆٛ͢Δɻ • constͱfinal͸ͲͪΒ΋ఆ਺Λఆٛ͢Δ͕ɺ const͸ίϯύΠ ϧ࣌ʹ஋͕ඞཁͰɺfinal͸ίϯύΠϧ࣌ʹ஋͸ෆཁ͕ͩҰ౓ ஋Λ༩͑ΔͱҎ߱มߋෆՄɻ • _num0ͷΑ͏ʹΞϯμʔείΞΛ෇͚Δͱprivateͷѻ͍ʹͳ Δʢϝιου΋ಉ͡ʣɻ

Slide 14

Slide 14 text

੍ޚจ • if else • for loop • while loop • do-while loop • switch • forEach

Slide 15

Slide 15 text

੍ޚจ Java • if else • for loop • while loop • do-while loop • switch ͜ΕΒ͸Javaʹجຊಉ͡ɻࡾ߲ԋࢉࢠ΋ར༻Մɻbreak, continue΋ಉ͡ɻ

Slide 16

Slide 16 text

੍ޚจ forEach var list = [1, 2, 3, 4, 5]; list.forEach((elm) => print(elm)); • ΋͏গ͠ෳࡶͳॲཧΛߦ͍͍ͨ৔߹͸ؔ਺Λ࡞ͬͯ౉͢ɻ void printKeyValue(key, value) { if (key != null && value != null) { print("$key:$value"); } } Map map = {0: "zero", 1: "one"}; map.forEach(printKeyValue);

Slide 17

Slide 17 text

ྫ֎ॲཧ • ิ଍͢Δྫ֎ΫϥεΛ໌ࣔతʹॻ͘ͱ͖͸ try on • ໌ࣔతʹॻ͔ͳ͍ͱ͖͸ try catch • finally ͸ Java ʹಉ͡

Slide 18

Slide 18 text

try on try { var list = [1, 2, 3]; print(list[3]); } on IndexError { print("Index out of bounds :("); } • catchΛ͚ͭͯྫ֎಺༰ΛऔΔ͜ͱ΋Մɻ try { var list = [1, 2, 3]; print(list[3]); } on IndexError catch (e) { print("Index out of bounds: $e"); }

Slide 19

Slide 19 text

try catch try { somethingGoesWrong(); } on ExceptionA { // do something here } on ExceptionB { // do something here } catch (e) { // do something here } • Catch-allͰ͢΂ͯิ଍͢Δɻ

Slide 20

Slide 20 text

Ϋϥε class Cat { String breed; int age; String name; Cat(String breed, int age, String name) { this.breed = breed; this.age = age; this.name = name; } } var birman = Cat("Birman", 13,"Ryu"); birman.age = 14;

Slide 21

Slide 21 text

Ϋϥε class Cat { final String breed; final int age; final String name; Cat(this.breed, this.age, this.name); } • Cat(this.breed, this.age, this.name) ͷΑ͏ʹthis.ύϥϝʔ λ໊ͱ͢Δ͜ͱͰίϯετϥΫλͷ୅ೖॲཧͷهड़Λল ུͰ͖ɺfinalΛ࢖͏͜ͱ΋Ͱ͖Δɻ

Slide 22

Slide 22 text

Ϋϥε Named Constructor class AndroidEvent { String title; String date; AndroidEvent(this.title, this.date); AndroidEvent.shibuyaApk(this.date) { this.title = "Shibuya.apk"; this.date = date; } AndroidEvent.caApk(this.date) { this.title = “CA.apk"; this.date = date; } } var event = AndroidEvent.shibuyaApk("today");

Slide 23

Slide 23 text

Ϋϥε Factory Constructor class Series { final int id; final String title; final String url; Series(this.id, this.title, this.url); factory Series.fromJson(Map json) { return new Series(json['id'], json['title'], json['url']); } } • ໊લ෇͖ίϯετϥΫλʹࣅ͍ͯΔ͕ɺதͰΠϯελϯε Λ࡞ͬͯฦ͢ඞཁ͕͋Δɻ

Slide 24

Slide 24 text

Ϋϥε Inheritance class Cat { String breed; int age; String name; Cat({String breed, int age, String name}) { this.breed = breed; this.age = age; this.name = name; } } var birman = new Cat(breed: "Birman", age: 13, name: "Ryu"); class Birman extends Cat { Birman(int age, String name) : super(breed: "Birman", age: age, name: name); Birman.myCat() : this(1, "Shuri"); } var birman = Birman(1, "Kairi");

Slide 25

Slide 25 text

ؔ਺ var _counter = 0; void increment() { _counter++; } void increment() => _counter++; • ؔ਺ͷத਎͕͚ࣜͩͷ΋ͷ͸ɺলུܗͰ΋هड़Մɻ

Slide 26

Slide 26 text

ؔ਺ getters and setters var _counter = 0; void increment() { _counter++; } catName = "Tama"; print(catName); // TAMA print(name); // Tama class Cat { final String breed; final int age; final String name; Cat(this.breed, this.age, this.name); String get catName => this.name.toUpperCase(); set catName(String name) => this.name = name; }

Slide 27

Slide 27 text

ؔ਺ Default/Named parameters void increment(int amount = 1) { ... } increment(); • σϑΥϧτύϥϝʔλ • ໊લ෇͖ύϥϝʔλ void enableFlags({bool bold = false, bool hidden = false}) { ... } enableFlags(hidden: true); {}ͰғΉɻશମͰͳ͘ݸผʹғΉ͜ͱ΋Մɻ

Slide 28

Slide 28 text

ؔ਺ Positional parameters • ϙδγϣφϧύϥϝʔλ void setName(String last, [String first, String middle]) { // } []Ͱғͬͨύϥϝʔλ܈͸ͲΕ͔̍ͭʹ஋Λ༩͑ͨΒɺͦͷύϥϝʔλΑΓॱ ൪͕લͷ΋ͷ΋஋Λ༩͑Δඞཁ͕͋Δɻ ྫ͑͹ɺ[a, b, c, d, e] ͱ͋ͬͨͱ͢Δͱɺdʹ஋Λ༩͑Δ৔߹͸a, b, cʹ΋༩͑ ͳ͚ΕͳΒͳ͍ɻ

Slide 29

Slide 29 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ

Slide 30

Slide 30 text

Flutter Meetup Tokyo #3 2018/07/19 @FlutterTokyo