りゅうくんの備忘録

徒然なるままに思ったことを書くところ

そつけん発表で喋らなかった事

11月30日に僕の通う専門学校のそつぎょうけんきゅうはっぴょうがありました。
その際時間が足りなさそうだなぁと端折った話をブログで書いてアドベントカレンダーの足しにしようかなと思います!

うちの学校のアドベントカレンダーです!

speakerdeck.com

発表した時の原文のスライドはこちらからご覧になれます!!! よければご支援お願いします🙇‍♂️  www.pixiv.net

自作の中間言語を全てアロー構文を用いた関数で書くメリットについて

スライドにて自前の中間言語風の定義は500行くらいあるとと言うお話をしました f:id:Ryu1kun:20191205164102p:plain

それらの中間言語っぽい奴らは全て => な関数で定義されています

=> な関数で定義してあるのには大きく2つの理由があって

  • テストのしやすさ
  • 副作用のなさ

が挙げられます。

そもそも関数で定義している理由に、eval時の安全担保と言うのもありますが、今回はそれについては書きません。

テストのしやすさ

関数にするととてもテストがしやすいです。

例を挙げて考えてみましょう

const add = x => y => x+y // addと言う関数があったとします

add(1)(1) // このように使われる事を想定しています。
          // この関数に対する期待する結果は2です!(1+1は2なので)

add(1)(1) === 2 // 期待する結果と実際の出力を比べます
                // この条件式がtrueになれば関数は正しいと証明されます

// 👆上記のように関数で定義すれば条件式に含めるだけで簡単なテストを簡単にすることができます

予想する出力と実際の出力があっているか調べることで後々のバグを潰しておけます

副作用のなさ

副作用のなさを説明する前に、プログラムにおける副作用とは何かと言うお話

プログラミングにおける副作用(ふくさよう)とは、ある機能がコンピュータの(論理的な)状態を変化させ、それ以降で得られる結果に影響を与えることをいう。代表的な例は変数への値の代入である。

引用 wikipedia

簡単に書くと、同じ構文なのに同じ結果が帰ってこないことを言います

例をあげると

const succ = x => x+1 
let n = 0

console.log(succ(n)) // 1
// ここで副作用のある行為(変数への代入)を行う
n = 1

console.log(succ(n)) // 2
 //同じ形なのに出力結果が変わってしまう

(例などが違ったらご指摘いただけると幸いです🙇‍♂️)

Craftomyでは、基本的な移動や攻撃の関数にターゲットを引数でとるように関数を定義していて、 そのおかげで、敵味方関係なく関数を使いまわすことができてとても便利でした

アトミックデザインについて

コンポーネントを1パーツレベルまで分けて設計する感じの考え方です(ざっくり)

とてもわかりやすい参考の文書です。気になったら読んでみてください design.dena.com

最後に

  • ここ違うよ!って場所は指摘していただければ幸いです!
  • 合わせてコードもみてみたい方向けです github.com