目次
Java,kotlinの実装で共通で使えるモノ
↓実装の際に参考にさせて頂いたサイト
「Java8」LocalDateTimeクラスのtruncatedToメソッドで時間を切り捨てるサンプル
https://arkgame.com/2020/11/05/post-160269/
その他参考サイト
Java8の日時APIはとりあえずこれだけ覚えとけ
https://qiita.com/tag1216/items/91a471b33f383981bfaa
オブジェクト指向言語
Java,kotlin
クラスの継承
- 変数の定義を、親クラスの型でしておけば、子クラスの型のデータをそこに入れることが可能
子クラスの型で定義した変数に、親クラスの型のデータを入れることは出来ない(子には定義されているが、親には定義されていない情報があるため)
コードの対応漏れを防ぐ方法
リファクタリングとかで消す予定のクラスやメソッドはTODOコメントで後から消すことを書いておくよりも、@Deprecatedアノテーションを付けておいた方が、対応漏れが防げそう
参考サイト
変数名
変数名の付け方で困ったこと
😥困りポイント
「Aを含めるか?含めないか?」という意図のフラグがある。
しかし、"含める/含めない"のどっちに"true/false"が対応するかが分かりにくい・・・
詳細
もし、フラグの意図が 「有効か?無効か?」 であれば、"有効=true"、"無効=false"と連想しやすそう。
(例:Bの条件が有効か無効かを示すフラグ)
しかし、 「含めるか?含めないか?」 だと"含める/含めない"が"true/false"のどちらに対応するのかが分かりずらい・・・
以下の2パターンが考えられてしまう。
- 含めることに重きを置いて、"含める=true"、"含めない=false"
- 含めないことに重きを置いて、"含めない=true"、"含める=false"
対策
- 単純に「フラグを貰う」と割り切って、「Aを含める許可をするフラグ」を取得する と考える
- もし、必ずしもtrue/falseのBoolen型で扱う必要が無いのであれば、enum(列挙型)クラスで状態を定義するようにした方がいいかも
enum(列挙型)クラスで状態を定義するイメージ
Java Doでしょう 31増田 亨さんと設計の実践的な考え方を学ぼう!に参加した時のメモ書き(覚書)より
アプリケーション記述
アプリケーションに特化したデータ型を独自に作ってそれをつかうようにする
例:金額計算を
✖Int(プリミティブなデータ型)とかを使って金額を計算する
◎mony型というアプリ独自の型を作ってアプリ内で必ずそれを使うようにする
例:通信成功失敗の結果を
✖BooleanでTrue、Falseのフラグで返す
◎SendResult型を作って、SUCCESS、FAILUREを返す
class Main {
fun main() {
var a: StateEnum = getStateOfAUseCase() // getStateOfAUseCase()で、StateEnum.INCLUDEかStateEnum.NOT_INCLUDEが返るイメージ
println(a) // INCLUDEか、NOT_INCLUDEが表示される
}
/**
* 状態の定義.
*/
private enum class StateEnum { // ★enum(列挙型)クラスで状態を定義
// 含む
INCLUDE,
// 含まない
NOT_INCLUDE,
}
}
ポイント
説明が濃いフラグ(説明をしっかり読まないとわからないフラグ)をtrue/falseの文脈で判断させるのは、認知負荷を上げてしまうのため避けた方がいい
やっちまった事→教訓
- grep検索をして、削除などの対応が漏れている箇所が無いかを確認する