kotlinでrawStringを使う
kotlinです。
開発中にAPIは実装されていなけど、返すjsonのフォーマットは決まっている時に パースを試したい時などがあると思います。
そういう時はjsonをコード内で直接書いてパース出来るかテストしてたのですが ダブルクオーテーションのエスケープが面倒くさいし読みづらい!
val jsonTest = "{\"id\":1,\"name\":\"taro\"}"
そんな時はrawStringが使えます。 "を3回繰り返せば、その中で書いた文字列は全てエスケープ不要となり 生のtextとして扱えるのでエスケープの煩わさしさから開放されます。
val jsonText = """ {"id":1,"name":"taro"} """
エスケープ面倒くさいなーという時は思い出してあげて下さい。
RxObserverのテスト
RxJavaの話です
Rxでテストをする時はObservableがtestメソッドを持っているのでこの返却値を使います。
val test = Observable.fromArray(1, 2, 3, 4) .filter { it % 2 == 0 } .test()
testはTestObserverであり、自身にいくつかのassertionを持っているので UnitTest時に使うことで表明する事ができます。
//errorが発生しないことを表明 test.assertNoErrors() //流れてきたイベント値の表明 test.assertValueAt(0) { it == 2 } test.assertValueAt(1) { it == 4 } //completeしていることを表明 test.assertComplete()
流れてくる値が1つだけなら test.assertValue((T) -> Boolean)も使うことが出来ます。
いつでも正しいコードと言えるように RxでもTestを書いていきましょう。
全体のコードです
@Test fun filterOfEvalTest() { val test = Observable.fromArray(1, 2, 3, 4) .filter { it % 2 == 0 } .test() //errorが発生しないことを表明 test.assertNoErrors() //流れてきたイベント値の表明 test.assertValueAt(0) { it == 2 } test.assertValueAt(1) { it == 4 } //completeしていることを表明 test.assertComplete() }
viewをクリックした際の背景の設定
ButtonやListViewには初めからクリック時の背景が変化しますが そうでないViewに設定する場合。
一番簡単なのは以下のように
android:background="?attr/selectableItemBackground"
を付けてあげると変化してくれます。
さらに5.0以上ならちゃんとロングクリック時のフェードエフェクトも行ってくれます。
簡単だね!
<LinearLayout android:id="@+id/inviteAbout" android:layout_width="match_parent" android:layout_height="48dp" android:gravity="center_vertical" android:orientation="horizontal" android:background="?attr/selectableItemBackground" >
[所要時間:5分]
xmlにプレフィックスを付ける
androidはxmlで画面や背景・ボタンを定義するが 開発が進むと膨大な数になって管理コストが増えていく。 何か解決策ないかと探してると DroidoKaigiのアプリがプレフィックスを付けて管理していたので 取り入れた所ある程度改善できたように思えた。
どんな感じかというと
のように名前をつける。 bgはbackgorund partはincludeするlayout btnはbutton
以前はxxx_background.xmlと名付けていたので 一覧性が犠牲になっていた。 プレフィックスがあれば使用用途毎に並ぶので、見つけやくてグッド。
余談だがAtomicDesignを取り入れられないか思案中。 勉強だー
[所要時間:8分]
VIPERについてダラダラ書く
現在AndroidをVIPERというアーキテクチャーで書いてます。 元々はiOSのもらしいけど合わせる形で採用しました。
iOS Project Architecture : Using VIPER [和訳] - Qiita
android:kotlin,iOS:swiftで書くわけですが 似てる部分もあると言われる2つの言語。 進めていく中で言語の差があることがわかりました。
kotlin | swift | |
---|---|---|
抽象化 | interface | protocol |
static抽象化メソッド | 持てない | 持てる |
抽象化に実装 | 持てる | 持てない |
enum毎に変数 | 持てない | 持てる |
もっとあるけれどVIPERでやる中で気になったのはこの辺り。
同一のアーキテクチャでも言語によって 書き方が結構変わったり、そもそも片方でしか実現できない事があったりして 乗り越える課題が多いですが、統一化出来れば保守性は上がるかもしれません。
所要時間:10分
プリンシプルオブプログラミングを読みました
一通り読み終えた。
プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則
- 作者: 上田勲
- 出版社/メーカー: 秀和システム
- 発売日: 2017/04/27
- メディア: Kindle版
- この商品を含むブログを見る
800冊以上の技術書を読んだ著者による 身につけたい原理原則が書かれている本。 プログラミングする上でのエッセンスの詰め合わせのような本だった。
複数の本に同じことが書かれていれば それは真理として捉えて良いとレベレッジリーディングに書かれていたが まさにそれを体現したかのような内容だった。
要は様々な本に書かれている要点を纏めたようなもの。 要点故に深くまでは突っ込まないので 気になったら参考文献を読むと良いっぽい。
割りと実務に関する物も多いので 実際に働き始めて1年以上経つと 刺さる部分が多くなるんじゃなかろうか。
自分は読んでいて気になった箇所は折り曲げてマーキングしているが 全編通して折り曲がっているので役に立つ筈。 このあと纏めてみるのよ。
[所要時間:8分\
Spinnerの選択はDropDownとDialogがある
表題の通り。
layout.xmlでSpinnerのタグに spinnerModeを指定することで 選択方式をDialogとDropDownを切り替えることができる。
//Dialog
<android.support.v7.widget.AppCompatSpinner android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/spinner1" android:spinnerMode="dialog" />
//Spinner
<android.support.v7.widget.AppCompatSpinner android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/spinner2" android:spinnerMode="dropDown" />
AppCompatSpinnerのデフォルトはdropDownだが この記述で簡単にDialogに変更することができる。
ちなみにstyleをandroid:Widget.SpinnerにするとDialogになる。
過去のメモより抜粋