JavaScript勉強会

JavaScriptの学習日記

Vue.jsのComputedプロパティ 【JavaScript フレームワーク入門】

Vue.jsの学習メモ。

今日は「JavaScript フレームワーク入門」の第4章を読んでみます。

 

jsstudy.hatenablog.com

 

 

4-3-1 Computedプロパティ

(p.132)

Vue.jsには、ViewModelをより深く使いこなすための機能が多数盛り込まれています。

基本的な使い方がわかったところで、覚えておくと役に立つVue.jsの機能について一通り説明していきましょう。

まずは、Computedプロパティ(算出プロパティ)についてです。

 

Computedプロパティとは?

プロパティは、基本的に値を保管するだけのものですが、場合によっては値に何らかの処理を施したいこともあります。

単純に保管した値を取り出すのではなく、必要に応じて処理した結果がプロパティの値として渡るようにしたい、ということですね。

このような場合に用いられるのが「Computedプロパティ」(算出プロパティ)です。

Computedプロパティは、メソッドを使って演算した結果を値として取り出すプロパティです。

これは、「computed」という項目として用意されます。

computed: {
  プロパティ名 : function(){……処理……}
}

 

Computedプロパティは、「計算プロパティ」「算出プロパティ」とも呼ばれています。

単に値を保持するのではなく、計算結果を取得する特別なプロパティです。

特別とは言っても、中身は単なる関数です。

 

(参考)Computed Properties – Ember.js入門(11) | Developers.IO

Computed PropertiesはObserverの応用的な機能

Computed Propertiesとは、関数(function)として振る舞うようなプロパティを定義する機能です。

 

SwiftのComputedプロパティ

iOSアプリ開発言語の「Swift」にも、Computedプロパティの機能があります。

 

(参考)Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (p.138)

コンピューテッドプロパティ ― 値を保持せずに算出するプロパティ

コンピューテッドプロパティは、プロパティ自身では値を保存せず、すでに存在するストアドプロパティなどから計算して値を返すプロパティです。

 

それでは、Vue.jsのComputedプロパティを使ったサンプルコードを試してみましょう!

 

(p.133)

合計計算のプロパティ

では、簡単なサンプルを作成してみましょう。

例として、数字(整数)を入力すると、1からその数字までの合計を得られるプロパティを作成してみます。

 

HTML

index.html

<!DOCTYPE html>
<html>

<head>
  <title>Hello</title>
  <meta charset="UTF-8">
  <script src="vue.js"></script>
  <script src="main.js"></script>
  <link rel="stylesheet" href="style.css"></link>
</head>

<body onload="initial();">
  <h1>Vue.js</h1>
  <div id="msg">
    <p>{{ result }}</p>
    <input type="text" v-model="number">
  </div>
</body>

</html>

vue.jsは、公式サイトからバージョン2のvue.jsをダウンロードしておく。

 

CSS

style.css

body {
  color: #F99;
  padding: 5px 16px;
  font-size: 14pt;
  line-height: 150%;
}
h1 {
  font-size: 24pt;
}
p {
  font-size: 18pt;
}

 

JavaScript

main.js

function initial() {

  new Vue({
    el: '#msg',
    data: {
      number: '0'
    },
    computed: {
      result: function () {
        var total = 0;
        for (var i = 0; i <= this.number * 1; i++) {
          total += i;
        }
        return total;
      }
    }
  })
}

 

実行結果

上記の「index.html」「style.css」「main.js」「vue.js」を同じフォルダの中に保存して、Chromeでindex.htmlを見てみます。

 

f:id:jsstudy:20170719215239p:plain

 

入力フィールドに「10」を記入すると、リアルタイムに合計「55」が表示されました。

(1+2+3+4+5+6+7+8+9+10 = 55)

 

Vueオブジェクトで「result」というComputedプロパティを用意しました。

resultは、単なる値を保持するプロパティではなく、1からその数値までの合計を計算して返すプロパティになっています。

 

jp.vuejs.org

複雑なロジックには算出プロパティを利用すべきです。

 

以前、Vue.jsで表示する値をちょっと加工するときに、

という方法を使いましたが、複雑な加工を行う場合は1行で書くのが困難になってくるので、代わりにComputedプロパティを使いましょう!とのこと。

 

まとめ

  • Vue.jsにはSwiftと同様に、Computedプロパティという機能が用意されている。
  • Computedプロパティは、日本語で「計算プロパティ」「算出プロパティ」などとも呼ばれる。
  • Computedプロパティは、単なる値を保持するプロパティではなく、計算結果を返すプロパティである。
  • Vueオブジェクトの中に「computed:」というプロパティを用意して、その中に書く。
  • Computedプロパティの中身は、実際には単なるメソッドだけど、通常のメソッドとは違う使い道もあるので、必要に応じて利用すればOK。

 

次回も、Computedプロパティの使い方について、引き続き詳しく見ていきたいと思います。

 

 

JavaScript フレームワーク入門

JavaScript フレームワーク入門