N個の要件があるならN行で書く
常にそうしろという主張ではなく
大きな主張の中の具体例としての「N個の要件があるならN行で書く」例のメモ
かなり色々前提がある
それらはフラットなのか、みたいな話とかもある
説明のための例
「N個の要件がある」ということを関数をパッと見た時に伝わると良い
メンタルモデルとコードを揃える
「レベルA(クリアで簡潔)」もまだ改善の余地があると思うmrsekut.icon
書かせてみて思ったが、自分でレベルCのようなコードを書くの逆に難しいな(?)
書き方
その要件について分析を終わらす
こういう流れになるよな、というのを言語化する
自然言語でも良いし、図でも良い
型でも良い
できればコードじゃないと良いと思う
少なくともなれるまでは
コードで考えると、具体的になりすぎる
結果、いつもの通り込み入った実装になってしまう
それを適当な関数を並べてN個で書く
code:ts
export const mergehogehogej = (
as: [], us:[]
): StatusReportGroup[] => {
const merged = merge(a, usInA); 入っている者同士でmerge
const other = toOther(usNotInA); 入ってないものはotherに
};
関数のシグネチャを考える
関数の内部を書いていく
↑マジの具体例と一緒に説明しないと全く分けがわからんなmrsekut.icon
リスト系の関数は、「基底部分」と「それ以外」という2つの要件を満たせばできる
なので2行で書いている、と言える
sumの例
code:hs
sum [] = 0
sum (x:xs) = x + sum xs
2つの要件がある
空配列のときは0を返す
それ以外の場合は、先頭要素に、残りのsumを足す
じゃっかん違う話な気もしてきたmrsekut.icon