うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

「JavaScript: The Good Parts」でjavascriptの悪さを追う

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

読んだ感想

むしろ、以下にjavascriptの設計が悪いか教えてくれる本だった。

  • あらゆる変数がグローバル(ただし、最新のES6ではローカルにするリテラルが導入された。)
  • クラスの書き方が存在しない(ES6では以下略)
  • NumericやStringやArrayの汎用メソッドが足りない
  • 整数型がない
  • おかしなfalse判定
  • 扱い演算子の数々(new, ==, voidなど)
  • 使用しない大量の演算子

有用だったこと

関数とメソッドの違いなど、普段なんとなく使っている用語の定義があったこと。

メソッド → オブジェクトのプロパティである関数 モジュール → インターフェースを提供するがその内部の状態や実装については隠蔽されている関数やオブジェクト クロージャ → 関数の一種で、作成された際のコンテキストへのアクセスを伴う関数。(書籍には概ねこのように書かれていたが、この定義だと正直たりないと思う)

また、javascriptのバグを生じやすい書き方を学べたこと。 例えば、new演算子。新しいオブジェクトを作ろうとしてnew Hoge()みたいな書き方は良くする。 この時、newを書き忘れた場合に予期しない値が代入されて、バグの原因になる。 よって、newを使わず、別のコンストラクタ関数を用意すべき、という意見があった。

==と===やら&&を&と間違うなど、タイポ関連のバグに対する注意が多く書かれていたと思う。 そもそもjavascriptは例外処理や警告が甘く、大体のミスは見過ごしてしまうので、どこでミスしたか原因切り分けが非常にやりづらい。単なるタイポ一つとっても警告してはくれないので、プログラマ側にミスを減らす努力を強いている。

どんな人におすすめ?

内容は、javascriptの基本文法を伝えつつ、関数やコンストラクタの仕様を教えてくれるものなので、初学者向け。 ただし、いかんせんわかりづらい記述が多いと思う。

「初学者」のレベルとしては、他言語でプログラミングを学んでアプリを作れる程度になった方を想定している。

他の言語から入った場合、javascriptは設計はかなり甘く、同じ感覚でコードを書くと痛い目を見る。 よって、この本でjavascriptの悪い部分をしっかり把握しておくのが、エラーやバグ対処に大いに役に立つだろう。

javascriptをある程度業務ですでに使っているなら、見る必要はない。

MacPortからHomebrewへの移行方法

以下ページに従ってmacportをOSX10.10.5で使えるようにする。 そもそも、macportだけをアンインストールしようとしても、以下エラーでできない。

Error: Current platform "darwin 14" does not match expected platform "darwin 13" Error: If you upgraded your OS, please follow the migration instructions: https://trac.macports.org/wiki/Migration OS platform mismatch while executing "mportinit ui_options global_options global_variations"

そこで、回り道になるが、macportをOSに合わせたものをインストールしてきて、 それをアンインストールするという手順を踏むことにする。 手順は以下。

  1. Xcodeを再インストール
  2. MacPortsを再インストール
  3. MacPortsでインストールしていたものを書き出して,一度全て消去.書き出したリストを使ってもう一度インストール

1. xcodeのインストール

インストールはせず、以下コマンド叩くだけ。

sudo xcode-select --install
sudo xcodebuild -license

2.「MacPortをインストール」

https://www.macports.org/install.php

このページからOSに該当するもの持ってきてダウンロード&インストール。

3.

※ 3.はもしかしたらこの手順すべてはいらないかもしれません。一応Migrationの手順に沿ってます。

port -qv installed > ports.list

とかでインストールしていたものを書き出し、

sudo port -f uninstall installed
sudo port clean all

で一度全て削除。

以下、スクリプトを持ってきて再インストール。

curl -0 https://svn.macports.org/repository/macports/contrib/restore_ports.tcl
chmod +x restore_ports.tcl
sudo ./restore_ports.tcl ports.list

アンインストール

次に、アンインストールする。

$ sudo port -fp uninstall --follow-dependents installed

残りの設定ファイル等を削除する。

sudo rm -rf \
  /opt/local \
  /Applications/DarwinPorts \
  /Applications/MacPorts \
  /Library/LaunchDaemons/org.macports.* \
  /Library/Receipts/DarwinPorts*.pkg \
  /Library/Receipts/MacPorts*.pkg \
  /Library/StartupItems/DarwinPortsStartup \
  /Library/Tcl/darwinports1.0 \
  /Library/Tcl/macports1.0 \
  ~/.macports

~/.bash_profileからMacPortsインストール時に追加した以下のPATHを削除。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

Homebrewのインストール

/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

これにて完了。

参考文献