Essential ActionScript 3.0 読書メモ 第33回 Classオブジェクト

静的メソッドと静的変数はそれを定義したクラスの中でアクセス可能である、というのは既に学んだ通り。例えば、Blogクラスに1つの記事あたりの文字数上限を静的変数としてもたせたとして、その変数にアクセスするには次のように書く。

Blog.maxWords

このコードで、Blogクラスを使っていることは、単なる文法の問題ではない。Blogは実際にmaxWordsを定義しているオブジェクトを参照しているのだ。Blogによって参照されているオブジェクトは、自動的に生成された組み込みのClassクラスである。

ActionScriptにおいて、全てのクラスは実行時にClassクラスのインスタンスとして表現される。プログラマーの観点からは、Classオブジェクトの最も初歩的な利用法は静的変数と静的メソッドにアクセスすることである。しかし、他のオブジェクトと同様、Classオブジェクトは変数に代入可能な値であり、メソッドや関数に渡したり、戻り値にしたりできる。

クラスをオブジェクトに代入して使うテクは、ある.swfファイルから別の.swfファイルのクラスにアクセスしたい時や、画像やフォント等の外部データを.swfファイル内に埋め込む際に用いる。

今日の進捗:191→192/1644

Essential ActionScript 3.0 読書メモ 第32回 クラス初期化子

ActionScriptがスクリプト実行時にクラスを定義する際、クラス初期化子と呼ばれるメソッドが自動的に作成され、そのメソッドが実行される。ActionScriptは、クラス内の全ての静的変数の初期化子と、変数・メソッドの定義ではないクラス階層のコードの全てをクラス初期化子の中に配置する。

クラス初期化子は、クラスが定義される時に一度だけ行われるセットアップ作業の機会を提供している。外部のメソッドを呼んだり外部の変数にアクセスしたりすることもある。

クラス初期化子の中のコードは直接実行モード(interpreted mode)時に実行され、実行時コンパイラー(JIT(Just In Time) compiler)によってコンパイルされない。実行時コンパイルされるコードは一般的に、直接実行されるコードよりも高速である。したがって、パフォーマンスを追求する際には、プロセッサーに負荷をかけるコードをクラス初期化子から移動させることを検討すべきである。

今日の進捗:188→191/1644

2012年に読んだ技術書まとめ && 2013年の抱負

あけましておめでとうございます。2012年に読んだ技術書のまとめ兼、2013年の抱負です。

☆HTML/CSS

HTML/XHTML&スタイルシートレッスンブック―ステップバイステップ形式でマスターできる
HTML/XHTML&スタイルシートレッスンブック

2月に読了。XHTML1.0を使用したマークアップの入門書。CSS2も同時に習得できます。最初からHTML5を学べる入門書も出てきていますが、XHTML1.0のマークアップはHTML5を書く上で基礎となるものです。本書が、HTMLマークアップの優れた入門書である点は現在でも変わりありません。オススメ。

HTML5+CSS3で作る  魅せるiPhoneサイト  iPhone/iPad/iPod touch対応
HTML5+CSS3で作る 魅せるiPhoneサイト

3月に読了。iOSデバイスに対応したサイト構築方法が学べます。「iPhoneサイト」であって「スマホサイト」ではないので、Android対応に関しては一切触れてません。

2013年は、HTMLに関しては「これをやりたい」ってあんまり無いんですよねえ。CSSに関しては、SCSS/LESSあたりには興味があります(やるとは言ってないw)。

☆JavaScript/jQuery

マンガでわかるJavaScript
マンガでわかるJavaScript

3月に読了。11月に再読。3月時点では分からないところは飛ばして読みました。11月時点では、JavaScriptのオブジェクト指向の理解が進みました。漫画はゆるくて面白いものの、サンプルコードが退屈なのが弱点。Webサイトマンガで分かるJavaScriptプログラミング講座の書籍版です。

Web制作の現場で使う jQueryデザイン入門 (WEB PROFESSIONAL)
Web制作の現場で使う jQueryデザイン入門

4月に読了。実践的なサンプルコードが充実しているうえ、商用利用可! 職場に1冊jQuery本を置いとくならコレ。基礎編は入門に適した内容になっているものの、実践編はプログラミング初心者にはツラい(正規表現が登場したりする)。jQuery学習書としてはWebデザイナーのための jQuery入門の方がオススメ。

jQuery ポケットリファレンス (POCKET REFERENCE)
jQuery ポケットリファレンス

調べ物用。jQuery1.4対応。公式リファレンスを見ても分からない、って時に、本書を読んだら解決したりする。

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本
Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

11月に読了。本の構成が初心者に優しくないうえ、邦訳が雑。非推奨。

JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技
JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

若手IT勉強会のため購入。マニアックなネタが多いので、中級者以上向け。

他に、JavaScript本格入門も買いましたが、未読。JavaScriptはしっかりやりたいなと思いつつも、いまいちやれてない。仕事で全然使ってないのが一因ですね。今年、どの程度やるかも、仕事次第。

☆PHP

PHP公式資格教科書 PHP5技術者認定初級試験対応 (EXPERT EXPASS)
PHP公式資格教科書 PHP5技術者認定初級試験対応

半分ほど読んで積ん読。環境構築は載ってないので、初心者向けではありません。非常に易しい内容と、妙にマニアックな内容(ビット演算とか)が混在しています。資格に関しては、受験料1万2千円と聞いて取るのをやめました。

よくわかるPHPの教科書
よくわかるPHPの教科書

4月に読了。プログラミング初心者でもOK。読みやすくて分かりやすいのですが、ある程度学習が進んでから読み返すと粗の見えてくる本でもあります。

代替となる入門書としては、プリペアードステートメントを使ってて感心したいきなりはじめるPHP(ただし本のレイアウトに難あり)や、「PHPの会社」アシアルのイラストでよくわかるPHPあたりが良いかな、と。

いずれも200ページ前後で、300ページある『よくわかるPHPの教科書』よりも情報量は少ないです。プログラミング未経験者のPHP入門は、「これ1冊でOK」な500ページ以上あるような入門書にいきなり取り組むより、薄い入門書を1冊読んでプログラミングの感じをつかむ → 充実した入門書を1冊読んで知識を本格化する という流れの方が挫折しにくいと思います。

※「充実した」の基準:MySQLは必須、オブジェクト指向まで載っているとbetter

Webサイト制作者のための PHP入門講座
Webサイト制作者のための PHP入門講座

8割ほど読んだところで積ん読。残りはCodeIgniterが必要になったら読む予定。Hello Worldからフレームワークまで一気に駆け抜ける。PHPのコードは、セキュリティにもしっかり気を配っていて好印象です。MySQLを全く扱っていないのが弱点で、オススメには一歩足りず。

Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本
Head First PHP & MySQL ―頭とからだで覚えるWebアプリケーション開発の基本

11月に読了。PHPとMySQLの基礎を固める本。オブジェクト指向が抜けているのは残念だが、HTTP通信の話やDB関係は充実している。2008年の本。MySQLの設定等、現在では通用しない部分もあるので、オススメには一歩足りない。

PHP 逆引きレシピ (PROGRAMMER’S RECiPE)
PHP 逆引きレシピ

調べ物用。「こういう機能はどう作ればいいんだろう」って時に、目的から探せるので便利。オススメ。

パーフェクトPHP (PERFECT SERIES 3)
パーフェクトPHP

現在読書中。実務者向けの本。PHPの基礎も載ってますが、言語仕様のつまづきやすいポイントや、PHPのオブジェクト指向の構文等、他の言語でバリバリ書いてきた人向け。PHP実務者必読! と言いたいくらい素晴らしい内容。オススメ。

ただし、PHPでプログラミングを学んできて、オブジェクト指向は使うほうは出来るけど、クラスの設計とかはちょっと……という私のような人は苦労すると思います。

独習PHP 第2版
独習PHP 第2版

現在読書中。良くも悪くも教科書的。オブジェクト指向プログラミングを初歩からきっちり解説してあるPHPの入門書は少ないので、本書は貴重な存在。難点は、(1) Windows環境を前提とした解説(環境構築はLinux向けも載っているが、本文のコードはWindows環境) (2) 文章やサンプルコードが退屈 の2点。

PHPに関しては、パーフェクトPHPまで読み終えたら一段落つくかな、という印象です。フレームワークに関してはCake PHPを学習していこうと思います。

☆MySQL

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版

10月に読了。MySQLの解説は分かりやすく、充実している。PHPも載っているのでMySQLを利用したいPHPerには最適。HTMLも載ってるが、10年以上前のスタイルなので真似してはいけない。

SQLは、CRUD文を一応書けるよ、という程度で、セキュリティやスケーラビリティ、MySQLのチューニング等、課題が山積。2013年に力を入れたい分野の一つ。

☆Ruby

たのしい開発 スタートアップRuby
たのしい開発 スタートアップRuby

Rubyのカルチャーに触れる本。Ruby入門者の1冊目にオススメ。

たのしいRuby 第3版
たのしいRuby 第3版

しょっぱなから「メソッド」「オブジェクト」といった用語が説明なしに出てくる等、初歩から載ってる割に初心者向けの配慮が不足している。Rubyの構文の気持ちよさを体験することができたのは良かった。

Rubyに関しては、Railsやりたいなあと思いつつやれずに終わった2012年でした。2013年はRailsやります。

☆Perl

新版Perl言語プログラミングレッスン入門編
新版Perl言語プログラミングレッスン入門編

私にとって、本書は「Perl入門」というより「正規表現入門」です。Perlの構文は今ではすっかり忘れてしまいましたが、本書で学んだ正規表現は毎日のように使ってます。解説が非常に丁寧なので、Perl入門者のみならず、プログラミング初心者にもオススメします。

Perlに関しては、『Perl言語プログラミングレッスン』を再読して、積ん読になっている初めてのPerl 第6版も読んで、手元で動かすスクリプトはPerlで組めるようになりたいな、と思ってます(現在はPHPで組んでます)。

☆ActionScript

Essential ActionScript 3.0
Essential ActionScript 3.0

現在読書中。私は、オブジェクト指向プログラミングの基礎を本書で学びました。基礎からの丁寧な解説と、実際に動く本格的なアプリケーションの作成を並行して行う。私の好みにドンピシャの1冊。ただし、分量が非常に多い(邦訳紙版は900ページ超)。

ActionScriptは「JavaScriptの皮を被ったJava」です。言語も環境もよくできてると思うのだけど、世間的には衰退するという予想が多いんですよね。個人的には、Angry BirdsのようなカジュアルゲームをPC/スマートフォン両対応で出す際には、Flashが現在の最適解、と思ってます。とはいえ、私はFlash制作者になりたいわけではなく、ActionScriptは趣味です。

☆新年の抱負

やりたいことの優先順位をつけると、

SQL(MySQL) > Ruby(Rails) > JavaScript > PHP > その他

って感じですね。SQLは仕事にも関係するし、やってて楽しい分野でもあるので、最重視。Rubyは新しい世界を知るため。JavaScriptは、覇権言語になりそうなのでやっとこうかなと。PHPはライスワーク。

その他としては、正規表現(日常使いの便利ツール)、Perl(YAPCを楽しむため)、Java(オブジェクト指向を学ぶため)、C(プログラマーの一般教養)あたりをやりたいな、と。

また、特定の言語に限らないトピックとしては、自動テストの書き方、走らせ方。現在は、仕事でも(!)、プライベートでも、テストを全く書いてないので。gitに関しても、一度学びの機会を作りたい。

あと、エディタ。PHPはPhpStormで決定だけど、それ以外の言語をどのエディタで書くか。vimはサーバで設定をいじくる時に使うエディタとしては十分だけど、モードが面倒なのでメインとして使うには不安を感じる。一方、emacsはデフォルトのキーバインドがイケてないのと、カスタマイズの敷居の高さが難点。どちらかに決める突破口があれば良いのだけど。

今年もよろしくお願いします。

php.iniの探し方

php.iniといえばPHPの設定ファイルですが、編集しようとして置き場が分からず困る、ということがまれによくあるので、メモしておきます。

方法1 ターミナルからコマンドを叩く

LinuxやMac OS XのようなUNIX系のOSで使える方法です。以下の行をコピペしてターミナルに貼り付けてreturn。

php -r ‘phpinfo();’ | grep php.ini

正常に実行できた場合、

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

といった結果が出力されると思います。仕組みとしては、PHPをコマンドラインから実行して(php -r ‘実行したいコード’)、phpinfo()で設定情報を出力、出力された情報から「php.ini」という文字列を含む行だけをgrepという検索コマンドで抽出しています。

上手く結果が返ってこない場合、方法2でやってみるか、最後につけた付録を参照してください。

方法2 phpinfo()出力用のファイルを用意する

<?php
phpinfo();
?>

上の3行をコピペしてエディタに貼り付け、適当な名前をつけて保存。保存したファイルをWebサーバーの公開ディレクトリに置いて、そのファイルにブラウザーでアクセスする。するとPHPの設定情報が出力されたページが表示されるので、そこで「Loaded Configuration File」という項目を探す。

付録 トラブルシューティング

php -r ‘phpinfo();’ | grep php.ini

↑を実行した結果、

A. エラーメッセージが出力される → (1)へ
B. 大量に出力される → (2)へ

(1) 「php -v」を実行して、PHPのバージョン情報が返ってくるかチェック
 → 返ってくる → phpコマンドは正常に動いてるので、コマンドの打ち間違いをチェック
 → 返ってこない
  →  「/usr/bin/php -v」で結果が返ってくるかテスト
   → 返ってきた → 「/usr/bin/php -r ‘phpinfo();’ | grep php.ini」を実行すればOK(環境変数のパスが通ってない)
   → 返ってこない → PHPをCUIから実行できるようになっているかチェック

(2) 「grep –help」を実行
 「そんなコマンドねーよ」と返ってきた場合は、grepコマンドがインストールされていない

※「php – v」及び「grep –help」の両方が正常に出力される場合、打ち間違いの可能性が高い

Essential ActionScript 3.0 読書メモ 第31回 静的メソッド

静的変数が、クラス全体に関係する情報を追跡するのに用いられることは既に学んだ通り。同様に、静的メソッド(static methods)は、単にそのクラスの個々のインスタンスの機能を定義するのではなく、クラスの全体としての振る舞いを定義する。

たとえば、FlashのランタイムAPIには、Pointという名前のクラスがある。直交点座標(座標平面)上の点を表現するクラスである。Pointクラスは、極座標ペアのデータ(距離と角度)を与えられると、Pointオブジェクトを生成する、polar()という静的メソッドを定義している(Point.polar()の解説 by Adobe)。

理論的に言って、極座標を直交点座標に変換することは、直交点座標に一般的に関連する処理であり、特定のPointオブジェクトに関連する処理ではない。それゆえに、polar()は静的メソッドとして定義されている。

インスタンスメソッドと同様、静的メソッドはクラスの中でfunction定義を用いて作られる。しかし、静的メソッドの定義には必ずstatic属性を含まなければならない。
例:

class SomeClass {
  static function methodName (identifier = value) {
  }
}

アクセスコントロール修飾子によってアクセス可能性を制御できる点、及び使用可能なアクセスコントロール修飾子の種類、アクセスコントロール修飾子のデフォルトがinternalである点は、いずれもインスタンスメソッドと同じである。アクセスコントロール修飾子はstatic属性の前につける。
例:

class SomeClass {
  public static function methodName (identifier = value) {
  }
}

静的メソッドを呼ぶには、以下のように書く。

SomeClass.methodName(value)

定義したクラスの内部であれば、静的メソッドは、クラス名を頭に付けなくても呼べる。
例:

SomeClass {
  static function methodName (identifier = value) {
  }

 methodName(); // SomeClass.methodName(); と同じ
}

しかし、静的メソッドとインスタンスメソッドを区別するため、厳密には必要でなくとも、クラス名をつけて静的メソッドを呼ぶことが多い。

静的メソッドだけを定義しているクラスもある。そのようなクラスは、関連する機能をまとめるが、インスタンス化されることは無い。

たとえば、組み込みのMouseクラスはshow()とhide()という静的メソッドだけを定義している。これらはマウスポインターの表示・非表示を切り替えるのに使う。これらの静的メソッドは、Mouseクラスのインスタンスを通さず、Mouseクラスから直接アクセスできる(例:Mouse.show(), Mouse.hide())。Mouseクラスのオブジェクトが作られることは無い。

静的メソッドには、インスタンスメソッドには無い2つの制限がある。1つ目は、静的メソッドはthisキーワードを使えないということである。2つ目は、静的メソッドは同じクラス内で定義されているインスタンス変数とインスタンス変数にアクセス出来ないという点である。

(一方、インスタンスメソッドは静的変数や静的メソッドに加え、インスタンス変数や他のインスタンスメソッドにもアクセス出来る)

一般に、静的メソッドは静的変数に比べて使用される頻度は低い。

今日の進捗:307→312/2689