Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dart for Android Devs

Dart for Android Devs

shibuya.apk #26で発表した内容です。Android開発者として、Flutterを学ぶ際にDartでおやっと思ったポイントを軽くまとめました。

Shigehiro Soejima

June 27, 2018
Tweet

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. DartPad
    https://dartpad.dartlang.org/

    View Slide

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

    View Slide

  6. σʔλܕ
    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

    View Slide

  7. σʔλܕ
    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

    View Slide

  8. • ࿈݁ (վߦɺϒϥϯΫɺʴΛ࢖ͬͨ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ͷग़ྗ݁Ռ͸͢΂ͯಉ͡ɻ

    View Slide

  9. • 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

    View Slide

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

    View Slide

  11. σʔλܕ
    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Λ͍ͣΕ͔ͷํ๏Ͱ෇͚Δɻ

    View Slide

  12. σʔλܕ
    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ϖΞͰͷఆٛ΋Մೳɻ

    View Slide

  13. ม਺ɾఆ਺
    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ͷѻ͍ʹͳ
    Δʢϝιου΋ಉ͡ʣɻ

    View Slide

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

    View Slide

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

    View Slide

  16. ੍ޚจ
    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);

    View Slide

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

    View Slide

  18. 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");
    }

    View Slide

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

    View Slide

  20. Ϋϥε
    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;

    View Slide

  21. Ϋϥε
    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Λ࢖͏͜ͱ΋Ͱ͖Δɻ

    View Slide

  22. Ϋϥε
    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");

    View Slide

  23. Ϋϥε
    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']);
    }
    }
    • ໊લ෇͖ίϯετϥΫλʹࣅ͍ͯΔ͕ɺதͰΠϯελϯε
    Λ࡞ͬͯฦ͢ඞཁ͕͋Δɻ

    View Slide

  24. Ϋϥε
    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");

    View Slide

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

    View Slide

  26. ؔ਺
    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;
    }

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide