Number#toStringの詳しい解説 ― 2007年08月18日 00時08分16秒
久々のJavaScriptネタ。といってもすごい人へのリンクですが。
Number#toStringの深層
以前書いたエントリ「Number#toString、面白い」の関連だが、ネタ元のnanto_viさんが詳細を調査された模様。
仕様の解説と、各ブラウザごとの実装状況まで調査しておられ、一覧表を掲載されている。これは非常に参考になる。
(ありがたいというか恥ずかしいというか、「Number#toString、面白い」にリンクしていただいた。どうもありがとうございました。)
parseIntもそうなんだ
Number#toStringのほかに、parseIntについても言及されている。parseIntの第二引数にradix指定できるなんてしらなんだ。と思ったら、Windows スクリプティング テクノロジのヘルプ(Script56.CHM)にもちゃんと
radixって書いてあるのねん。見落としてたわ。
省略可能です。引数 numstring に含まれる数値の基数を表す 2 ~ 36 の範囲の値を指定します。省略した場合、先頭に "0x" が付いている文字列は 16 進数、"0" が付いている文字列は 8 進数と見なされます。これ以外の文字列は、10 進数と見なされます。
parseIntのすごい使い方
さらにparseIntの使い道でこんなすごいアイディアまで。
余談ですが、anarachy golf banner での 2007 年 3 月 8 日時点での JavaScript の記録 (278 バイト) では、データサイズを減らすため数値データを 36 進数文字列として格納し、parseInt を使ってそれを数値化しています。
多少は和らいだかな? ― 2007年08月18日 03時27分31秒
暑さには強いんだけど
夏生まれのせいか、ほかの人より暑さには強いと思うんだけど、さすがに体温と同じくらいの気温が続くと「もぉいいっス」という感じになっていたのだが、今日になって多少楽になった気がする。
それが証拠に、多少ブログを書く気になってるし(w
どのくらいで「暑すぎ」と思うか
5~6年くらい前は32度を超えると「暑すぎ」と思っていたのだが、ここ数年は33度くらいまで許容範囲だった。
しかしこの猛暑でまた少し許容範囲が広がった気がする。たぶん34度まで大丈夫と身体が勘違いしていそうだ。
気が付いたらもう8月も半ばを過ぎ、暦の上では秋が近づいてきているが、来週は多少は楽になるかなぁ。
余談
ボクのセンセイはぁ…と出てきた貴方は 40代。...まだ30代だけど浮かびましたよ > 水谷豊の顔。
PHPのコネタ ― 2007年08月18日 04時10分33秒
脈絡もなくPHPネタ。いや、いろいろとすぐに忘れちゃうもんで。
スタティックメソッドチェーンて、できるのか?
まぁ、インスタンスアクセスをしないユーティリティクラスに対して値を設定するなんてことは普通しないワケなんだけど、何を思ったのか、スタティックメソッドでメソッドチェーンができないかを試してみた。
ま、実用性皆無のサンプルだけど、こんな感じのコードがあったとする。
/** * 単純なカウンタクラス */ class Counter { private static $_counter = 0; /** * 現在値の取得 */ public static function current() { return self::$_counter; } /** * カウンタを進める */ public static function increment() { self::$_counter++; } }見てのとおり、現在値の取得とカウンタのインクリメントをスタティックメソッドで提供している。で、これを
var_dump( Counter::increment() ); echo Counter::current();とかってすると、出力は
NULL 1見たいな感じになる。
で、本題。incrementメソッドを何も考えずに
public static function increment() { self::$_counter++; return self; }としてみる。「echo Counter::increment()::current();」とかってやってみたいわけ。記述は変態じみてるけど。
で、実行してみると、以下のようになる。
string(4) "self" 1キーワード「self」を戻り値にすると、"self"という文字列が返るみたいだ。なので当然「increment()::current()」はできませんでしたとさ。
call_user_funcのまとめ
よく忘れるのでメモ的にまとめる。
関数「call_user_func」は、第一引数に関数名、それ以降にその関数への引数を列挙することで動的な関数呼び出しを行う関数。
で、第一引数にはarrayを渡すこともでき、これによりメソッド呼び出しも行える。インスタンスメソッドもクラスメソッド(スタティックメソッド)も。
まとめるとこんな感じ。
- 関数呼び出し
-
- 呼び出したい関数名をstringで渡す。
- インスタンスメソッド呼び出し
-
- array渡し。arrayの第一要素にはメソッドを所有するインスタンス、第二要素にメソッド名をstringで渡す。
- クラスメソッド呼び出し
-
- array渡し。arrayの第一要素にはクラス名をstringで、第二要素にメソッド名をstringで渡す。
以下サンプル。ちなみにPHP5のコードなので注意。
<?php function func_test() { return '関数呼び出し'; } class TestClass { public function __construct() {} public function instanceMethod() { return 'インスタンスメソッド呼び出し'; } public static function staticMethod() { return 'クラスメソッド呼び出し'; } } // 「func_test()」と等価 echo call_user_func( 'func_test' ) . "\n"; // → "関数呼び出し" $test = new TestClass(); // 「$test->instanceMethod()」と等価 echo call_user_func( array( $test, 'instanceMethod' ) ) . "\n"; // → "インスタンスメソッド呼び出し" // 「TestClass::staticMethod()」と等価 echo call_user_func( array( 'TestClass', 'staticMethod' ) ) . "\n"; // → "クラスメソッド呼び出し"
いつのまにか1.0.1でてるし。 ― 2007年08月18日 04時29分53秒
うぎゃ、未チェックだった。Zend Frameworkが7/30付けで1.0.1になってる。
うーん、まだ詳しく見てないけど、Changelogをざっとなめた感じではbug fixメインかなー。
いま1.0.0で仕事やってるんだけど、バージョンあげたほうがいいのかしらん。今のとこバグくさいのにあたってないからこのままでもいいのかな。
最近のコメント