2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
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.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み