Essential ActionScript 3.0 読書メモ 第14回 インスタンスメソッド

インスタンスメソッドは、オブジェクトの「振る舞い」を決定する。インスタンスメソッドを作るには、functionの定義を行う。

例:

class SomeClass {
  function SomeClass () { // コンストラクターメソッド
  }
  function identifier() { // インスタンスメソッド
  }
}

コンストラクターメソッドにはクラス名と同じ名前をつけるのに対し、インスタンスメソッドには、識別子の命名規則に従っていればどんな名前でもつけられる。

インスタンスメソッドを呼び出すには、以下のように書く(call式)。

object.methodName()

今日の進捗:254→273/4343

Essential ActionScript 3.0 読書メモ 第13回 値渡しと参照渡し

this.title = subject;

というコードの中では、titleという変数にsubjectという変数を代入している。代入の結果は、変数の型によって異なる。

代入元の変数がString, Boolean, Number, int, uintのインスタンスである場合には、代入先の変数に代入元の変数が直接コピーされる(値渡し)。代入の後には、メモリー上に2つの同じ値が、別の領域に確保される。この変数は互いに無関係なので、代入後に一方の値が変わってももう一方は影響を受けない。
例:

x = 1;
y = x; // yは1
x = x + 1; // xは2, yは1のまま

対して、上記以外のActionScript内蔵クラスのインスタンスや、自作クラスのインスタンスを代入した場合には、ActionScriptは2つの変数を関連付ける(参照渡し)。代入の後でも、代入元の値がメモリー上に2つ確保されるわけではない。メモリー上の領域は同一で、2つの変数の両方がその領域を参照する。片方の変数に対して加えられた変更は、もう一方の変数にも影響を及ぼす。
例:

var a = new Blog();
var b = a;
a.title = “my first blog”;
trace(b.title); // “my first blog”

このコードでは、Blogオブジェクトが1つだけ生成され、aとbの双方がBlogオブジェクトを参照している(traceは出力テスト用の組み込み関数。本文中には出てきていないが説明のために使用)。aに加えた変更の結果、参照先のBlogオブジェクトの内容が変更され、Blogオブジェクトを参照しているbの出力も影響を受ける。

今日の進捗(昨日と合算):240→254/4343

Essential ActionScript 3.0 読書メモ 第12回 this

インスタンス変数に新しい値を代入する際には、以下のように書く。

object.instanceVariable = value;

クラスの中で、オブジェクト自身のインスタンス変数に値を代入する際には、thisというキーワードを使う。
例:

internal class Blog {
  internal var title;
  public function Blog (subject) {
    this.title = subject; // thisが指しているのはBlogクラス。Blogクラスのtitle変数にsubject変数の値を代入。
  }
}

『Head First JavaScript』を読了した(ことにしておこう)

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

独創的かつ親しみやすい見た目と、それとは裏腹に分量が豊富で本格的な内容の入門書シリーズ『Head First』のJavaScript版です。私がプログラミングを覚える際、最初に接した本でもあります(昔、BASICを触ったことはありますが、もはや記憶の彼方…)。

本書を初めて読んだ際に感じたのは、「説明はわかるが、書けるようになった実感が湧かない」というものでした。結局、配列あたりでよくわからなくなって、ループあたりで脱落、その後は本棚でほこりを被っている、という状態でした。

私はのちにWebエンジニアとして職を得て、PHPをはじめ、JavaScript(というかほとんどjQuery)もそれなりに書くようになりました。そんな現在の私から見ても、本書はやっぱりとっつきにくい。説明は読めるのだけど、読んでコードが書けるようになる感じではない。合わなかった理由は、おそらく次の2点。

1.説明が飛び飛び。「オブジェクト」や「メソッド」といった言葉は序盤から出てくるが、それらの具体的な内容が分かるのは、全体の3分の2を過ぎたあたり。それまでずっとモヤモヤを抱えることになる。

2.説明の量に対して手を動かす量が少ない。

JavaScriptのprototypeベースのオブジェクト指向についてはある程度分かったので、それは収穫。だけど、DOM操作のような「手で覚える」タイプのプログラムはさっぱり書ける気がしない(jQueryを経験した身からすると、DOMを直でいじるのはダルすぎる、という理由もある)。

結局、Head First JavaScriptは私には合わなかった、というのが結論。なお、Head Firstシリーズ全般が合わないわけではない。Head First SQLなどはお気に入り。

一点指摘しておきたいのが、本書の翻訳の劣悪さ。たぶん、私が今までに読んだ本の中でワースト。私の手元にあるのは初版ではなく3刷だが、いたるところに誤りがある。誤字や誤植は可愛いもので、誤訳も散見される(例:「専門的な」の意味で使われているtechnicalを「技術的な」と誤訳)。何より酷いのは、「未訳」。日本語化されていない生の英語が、そのまま残っている箇所がある。具体的には、p.266の冒頭「It seemsJavaScriptは~ようです。」という部分。こんな翻訳、見たことない。

この分量の本を訳すのが、大変な割に見返りの少ない仕事であるのはわかるけど、少なくないお金をとる製品なのだから、最低限の品質管理はしてほしい。

iOS6のリモートWebインスペクタが便利な件

もしあなたがスマートフォン向けのWebサイトを作っているフロントエンド開発者で、iOS6を搭載したデバイスと、Safari6に対応したMacとを持っているなら、今すぐ試すべき機能があります。それが、iOS6&Safari6の新機能「リモートWebインスペクタ」。

Webインスペクタ自体はwebkitには元からついていますが、iOS6&Safari6のWebインスペクタは一味違う。iPhoneのSafariで表示しているWebページを、MacのSafariのWebインスペクタで操作することが出来るのです。

使い始める方法については、西畑一馬氏の記事をどうぞ。

SafariのWebインスペクタでHTMLをいじると、iPhoneのSafariの方の表示もリアルタイムに変わります。これは便利! デザインの調整のほか、JavaScriptのデバッグやHTTPヘッダーの確認など、様々な用途に使えそうです。