Share
Embed
Dart for Android Devs
shibuya.apk #26で発表した内容です。Android開発者として、Flutterを学ぶ際にDartでおやっと思ったポイントを軽くまとめました。
Shigehiro Soejima
June 27, 2018
Transcript
30 slides
-
σʔλܕ • numbers • strings • booleans • lists •
maps • ϓϦϛςΟϒܕͳ͠ -
σʔλܕ 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 -
σʔλܕ 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 -
• ࿈݁ (վߦɺϒϥϯΫɺʴΛͬͨ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ͷग़ྗ݁Ռͯ͢ಉ͡ɻ -
• 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 -
σʔλܕ 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Λ͍ͣΕ͔ͷํ๏Ͱ͚Δɻ -
σʔλܕ map var map1 = Map<int, String>(); // 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ϖΞͰͷఆٛՄೳɻ -
มɾఆ 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ͷѻ͍ʹͳ Δʢϝιουಉ͡ʣɻ -
੍ޚจ • if else • for loop • while loop
• do-while loop • switch • forEach -
੍ޚจ Java • if else • for loop • while
loop • do-while loop • switch ͜ΕΒJavaʹجຊಉ͡ɻࡾ߲ԋࢉࢠར༻Մɻbreak, continueಉ͡ɻ -
੍ޚจ 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); -
ྫ֎ॲཧ • ิ͢Δྫ֎ΫϥεΛ໌ࣔతʹॻ͘ͱ͖ try on • ໌ࣔతʹॻ͔ͳ͍ͱ͖ try catch •
finally Java ʹಉ͡ -
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"); } -
try catch try { somethingGoesWrong(); } on ExceptionA { //
do something here } on ExceptionB { // do something here } catch (e) { // do something here } • Catch-allͰͯ͢ิ͢Δɻ -
Ϋϥε 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; -
Ϋϥε 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Λ͏͜ͱͰ͖Δɻ -
Ϋϥε 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"); -
Ϋϥε Factory Constructor class Series { final int id; final
String title; final String url; Series(this.id, this.title, this.url); factory Series.fromJson(Map<String, dynamic> json) { return new Series(json['id'], json['title'], json['url']); } } • ໊લ͖ίϯετϥΫλʹࣅ͍ͯΔ͕ɺதͰΠϯελϯε Λ࡞ͬͯฦ͢ඞཁ͕͋Δɻ -
Ϋϥε 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"); -
ؔ var _counter = 0; void increment() { _counter++; }
void increment() => _counter++; • ؔͷத͕͚ࣜͩͷͷɺলུܗͰهड़Մɻ -
ؔ 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; } -
ؔ Default/Named parameters void increment(int amount = 1) { ...
} increment(); • σϑΥϧτύϥϝʔλ • ໊લ͖ύϥϝʔλ void enableFlags({bool bold = false, bool hidden = false}) { ... } enableFlags(hidden: true); {}ͰғΉɻશମͰͳ͘ݸผʹғΉ͜ͱՄɻ -
ؔ Positional parameters • ϙδγϣφϧύϥϝʔλ void setName(String last, [String first,
String middle]) { // } []Ͱғͬͨύϥϝʔλ܈ͲΕ͔̍ͭʹΛ༩͑ͨΒɺͦͷύϥϝʔλΑΓॱ ൪͕લͷͷΛ༩͑Δඞཁ͕͋Δɻ ྫ͑ɺ[a, b, c, d, e] ͱ͋ͬͨͱ͢ΔͱɺdʹΛ༩͑Δ߹a, b, cʹ༩͑ ͳ͚ΕͳΒͳ͍ɻ