3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

副作用って結局何なのさ。

Posted at

最近、vue.jsの文脈で人にcomputedとmethods(と、data)について語る時に思いついた例がいい感じだったので、メモ。

公式読んだら理解できる人とかではなく、

<template>
  <div>税込価格 {{ getTaxIncludedPrice() }} 円</div>
</template>

<script>
export default {
  methods: {
    getTaxIncludedPrice() {
      return this.price * 1.1
    }
  }
}
</script>

「こんなのはcomputedに定義しましょう」って言うのは簡単なんだけど、
大体なんで?ってなります。

副作用がないコードはcomputedに書きましょうって言っても、
はぁ、、となります。

結論

体重計に乗った時の計測値を取得する() という関数と
かーちゃん殴った時の反応を取得する() という関数を考えましょう。

両者ともに処理が2行で、返り値が1つのシンプルな関数に見えますが、

体重計には何度乗っても反応は変わりません。自分が同じである限りは、結果は一定です。
自分が太れば結果は変わります。
こういう副作用がないものの、計算が必要なものは、体重()というcomputedにしましょう。

一方で、かーちゃんは一度殴ってしまうと、かーちゃんの状態が変化します。
次に、別の兄弟がかーちゃんを殴ろうとすると、そもそも学習したかーちゃんを殴るのに失敗するでしょう
こういう、副作用がある(状態が変化する)ものはmethodsに定義しましょう。

と、伝えるといいと思います。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?