LoginSignup
4
2

More than 5 years have passed since last update.

constにまつわるもやもやの整理

Last updated at Posted at 2017-02-08

ES6でコードを書いていると、constを多用していくケースもありますが、どうにもモヤッとした気分になってしまいます。原因を考えてみると、「言語・文脈ごとにconstの意味合いが違ってくるから」という結論に達しました。

C++

C++にあるconstキーワードは、状況によってconstとなる対象が変わってきます。そして、クラス型について、普通の変数や参照では「オブジェクトと変数を切り離せない」ということもあってか、オブジェクトそのものを書き換え禁止できるという、特徴的な機能があります。

  • const SomeObject oo自体が書き換え不能(constでなくても、oとオブジェクトを切り離す方法もない)
  • const SomeObject& rr自体が書き換え不能(constでなくても、rとオブジェクトを切り離す方法もない)
  • const SomeObject * ppの指す先が書き換え不能
  • SomeObject * const pp自体が書き換え不能

PHP

PHPの場合、constをかけた定数にできることがかなり限られています。

  • スカラー型、あるいは配列(PHP 5.6以上)のみ定数にできる。オブジェクトを定数にはできない
  • constで定数を作る場合、書けるものはリテラルか定数式(PHP 5.6以上)のみ。
  • define関数を使えば、式の結果を定数にできる。

ES6

これらに対してES6では、constにかかる制約は「入れたもの(値 or オブジェクト)を入れ替えられない」だけです。破壊的変更だろうが可能ですし、計算した結果をconst変数に格納しようが一向に構いません。

似たような機能が何かにあったなと考えてみたら、Javaのfinalでした。

4
2
3

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
4
2