2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
Dart for Android Devs(全1記事)
リンクをコピー
記事をブックマーク
ssoejima氏(以下、ssoejima):今日はDartをAndroid開発者向けに話をしたいと思います。Flutterを触ったことがあるという方、どのくらいいらっしゃいますか?
(会場挙手)
けっこういますね。触ったことはないけど興味はある人。
(会場挙手)
やや増えたぐらいですね(笑)。Flutterを始めるにあたって、自分でもいろいろやったんですが、その時にDartの部分で、気持ち悪かったり分からなかったことをまとめたので、発表したいと思います。
Soejimaと申します。DeNAでAndroidエンジニアをやってます。shibuya.apkとFlutter Meetup Tokyoの運営のお手伝いをもらってます。
今日話すのはこれだけです。
それぞれ自分で気持ち悪かった点などを共有します。
その前に、Dartやる時は、Webですぐにコードを実行できる環境があるので、ちょっと試したい時はここでできます。
少しだけJavaScriptのDartの実装が違うので、一番下に書いてある「int x」、数字の扱いが違うので要注意です。intなんですがどちらもdouble扱いなんですよね。
そして、データ型。基本はこの5つで、前半がプリミティブ型です。
intとdoubleしかありません。たぶんDartでコードを書く一番最初の頃に出会うと思うのは、この4/2とか。
割り算やると、当たり前ですがエラーになります。キャストしてもダメです。では、どうすればいいか。toInt()するしかないんだけど気持ち悪いなと。よく調べたら、チルダを付けるとよいです。これ、きっと出会うと思うので覚えておいてください。
そして、doubleはこんな感じですね。numという、intでもdoubleでもどっちでもいいよという、ちょっといい加減なタイプもあります。これは見たことないんですが、一応存在してます。常にdoubleでもintでも自由に入れ替えられます。
strings。
クオートはSingleでもDoubleでもどっちでもよいです。エスケープなんかしたくない時は、「r\」を付けてください。
これは、Dartのコーディングの時に初めて出会って、「どういうこっちゃ?」と思ったんですけど、基本的にはブランクでもできます。これは、全部同じ出力になります。
補間はKotlinとまったく同じですね。これも調べたら同じでラッキーって感じです。3連クオートもあります。HTMLと親和性があるみたいなので、これも使えます。
boolは、とくになにもないです。Javaと同じで、boolのtrueだけがtrueです。1とかnullとか、 そういうものは使えないということです。
list型。これは自分でコードを書いていて配列が作りたいと思った時に、「なんか配列の情報がぜんぜんないな」と思ったら、listでやってくださいということでした。なので、全部listになります。0スタートで、varを使っていったんデータ入れるとインファレンスで型が付いちゃうんで、一番下のこのlistに2.0とかは入らなくなります。
定数は、「コードによってなんか違うな」と思っていたら、2つ書き方があります。Dartには同じことをやるのに複数の書き方があって、わりと違うので、最初の頃はちょっと悩みます。
mapもだいたい同じです。
Dart 2から「new」を付けなくてよくなっています。今、Android Studioでサンプルコードつくると「new」付いているので、もういらないので消しましょう。5月から確か、……5月かな、DartからDart 2に変わったんで、今は大丈夫です。
mapの定義の仕方は、真ん中のやつが一番よく見ます。key-valueペアでやってます。const化は、listと同じですね。
変数と定数です。
順序があれなんですけど、varで使うか、明示的に型を与えますと。finalとconstが混ざっているので「何だろうな?」と思ったら、constのほうはコンパイル時に値が付いてないといけないってことですね。finalは動的にコンストラクターとかで付けるかたちです。
コードを見てると、「やたらアンダースコアが付いてるな」と思ったら、アンダースコア付けるとprivate扱いになります。メソッドも同じです。
制御文です。
言語が変わるとここも変わることが多いので、ちょっと調べたらJavaと同じでした。なので、とくに気にすることもないと思いますけど。break、continueとかも使えます。逆に言うと、switchにbreak入れなきゃいけないので、ちょっと面倒くさいですね。
forEachだけがちょっと違っています。
これはこういう書き方すると覚えるしかないんですけど、ファットアローでやるやつですね。式の時だけは、1行で書くことができます。
複雑なステートメントになると外に出さなきゃいけなくて、関数をつくって関数名を渡すとよきにやってくれます。
例外です。
「これもJavaと同じかな」と思って書いたらダメだったので調べたら、try onというのがあって、クラス名を指定する時はonの後に、「try 〇〇 on index error」みたいなもの付けるようになっています。それ以外はtry catchで全部補足することができます。
どんな感じかというと、これですね。
ちょっとだけスッキリしてますよね、Javaに比べて。中の例外のインスタンスを見たい時は、catchを付ければちゃんと取れます。
「なんかわからん」と、たまにCrashlyticsで、3人ぐらい訳のわからんExceptionが出てるという人は、catchで良きに計らってあげてください。内容は同じです。
クラスなんですが、パッと見た感じJavaと同じですね。
インスタンスのつくり方も同じです。ただ、getterとかsetterっていうのは裏で暗黙的につくられるので、.ageとかこんな感じでアクセスすることができます。
でも、実はコンストラクタですが、基本的に書き方はこっちです。
「this.名前」と書くと自動的に埋めてくれます。なので、これ以外ほとんど見ることはありません。最初に見た時に、コンストラクタってだいたいわかるんですけど、後で説明しますが、また、違うパターンも出てくるので。
Named Constructorというのがあって、名前の付いたコンストラクタで、これは適当につくった「AndroidEvent」というやつなんですが、タイトルと日付の2つを取ります。
「ShibuyaApk」というのを渡して取るよりも、このコンストラクタ自体に名前を付けてつくったほうがよいです。「staticメソッドかな」と最初思ったんですが、調べてみたらこんな感じでした。
そして、Namedよりもよく見るのが、こっちのFactory Constructorです。
さっきのNamedの頭にFactoryが付いただけのように見えますが、実際には、自分で中にインスタナスをつくって返さないといけません。「fromJson」と書いてありますが、Jsonでパーシングするときはよく使います。
Inheritance。これも書き方がわかんなかったので、こんな感じで書きました。
関数ですが、これもJavaとほとんど同じです。
上のやつとか、ほぼ同じですよね。ただ、これも中身が式だけのやつ、Expressionだけのやつは、イカでいけます。何て言うんですかね、これ。ファットアローって個人的には呼んでるんですけど、イカですよね。わかんないけど(笑)。日本語名がわからない(笑)。
(会場笑)
Javaだとgetter、setterって聞いたら、get nameとかset nameですよね。
Dartはsetとgetに分かれていると思うんですが、こうすることによってプロパティのエイリアスみたいなものがつくれます。getのほうは、そのままですよね。この2つをこんな感じで定義すると、「catName=」。要はするにカッコでやらなくてよくなります。そしてgetで直接抜くと、(デフォルトの)getとは違う風に出力することができます。いくらでも定義できて、「可読性が」とか言っていますが、「どうなんだろうな」って個人的には思います。
そして、デフォルトパラメータ。
これはKotlinと同じですよね。これはまあ、よいです。そして、名前付きパラメータ。これは先ほどコンストラクタのところにもあったんですが、複数入れて{}で囲むと、Kotlinのように扱えます。なので、どちらか1つを使いたい時は、名前を付けてやってください。ただ、必ず名前が必要です。そして、全部囲まなくても、1つだけでも大丈夫です。
そして、日本語名がわからなかったのでカタカナにしたんですが、これはちょっとわかりにくかったです。何かというと、last、firstみたいに名前を付けるんですが、lastを付けてfirstはOKなんですよね。ただ、lastとmiddleだけはダメという制限を、これで付けています。
どうやって付けているかというと、[]で囲った部分は、middleを付けたら必ずその前のやつは付けなきゃいけないと、そういう制限が付けられます。下にa、b、c、d、eって適当に書いたんですが、ここで言うと、dをセットしたかったら、a、b、cは必須になると、そういうパラメータの設定の仕方もできます。
Flutterをやっていると独自のクラスの扱い方、とくにレイアウトを覚えないといけないんですが、それやっている時に必ずこういったDartで書くので、たぶん出会うんじゃないかなと思います。ありがとうございました。
(会場拍手)
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略