トップ «前の日記(2006-12-23) 最新 次の日記(2006-12-25)» 編集

日々の破片

著作一覧

2006-12-24

_ MSDNの更新がわかりにくかった(継続中)

最近、オープンライセンスというのが1ライセンスから購入可能になったので、そっちに移行しようと考えた。というのは、複数年(個人の場合は2年)一括払いなんだがその代わりに普通のパッケージ価格の半額弱の計算になるからだ。と思う(と付け加えるくらいにいま一つ良くわからない)。

で、新規のオープンライセンスのVS Pro Premium(キャンペーン中)と継続のVS Architect Premiumがほぼ同じ値段で、現在VS Architectのおれは、ランクダウンになるProではなくArchitectに移行できると思うんで発注してみたが(でもProキャンペーン中はすごく安価なのでそれはそれで魅力的ではある)、その後でリンクをクリックすると5ライセンスから(これは以前の条件のはず)と書いたページとか、なんか不安になる情報しか出てこない。まともにWebページのメンテナンスがされてないのか、なんなのか。情報も錯綜している。発注と同時にMSDNサイトに登録しろとか書いてあるが、発注をかけた状態だけでは登録に必要なIDなどが手に入っていないのでそんなことはできない(追記:発注後に届く発注確認書にIDが出ているそうです。)。なにをどうしろと。パッケージからオープンライセンスへの移行ができないという可能性もあるだろうとか。でも、それにしてはお知らせ郵政メールにはお得なオープンライセンスをどうぞみたいなちらしも入っているし。

#怖いのは、発注はかかって金は取られて、かつ登録できないとかやっているうちに有効期限が切れて更新ではなく新規になることだ。それは恐ろしい。

_ RHG

JavaScriptパワーについて勉強。
    問題
  1. 表示される値を答えよ。
    function foo(x) {
      return
        x * 80;
    }
    alert(foo(1));
    
  2. (追加)表示される値を答えよ。
    function foo2(x) {
      return x
        +80;
    }
    alert(foo2(1));
    
  3. (さらに追加)問1と問2の結果から、JavaScriptが;を自動補完する仕様について説明せよ。
  4. 表示される値を答えよ。
    alert(3 & 5 == 1);
  5. 表示される値を答えよ。
    alert(8 == 10);
    alert(8 != 10);
    alert(8 || 10);
    alert(8 && 10);
    
  6. 表示される値を答えよ。
    var x = 1;
    switch (x) {
    case x++:
      x = 1;
    case x++:
      x--;
    case x++:
      alert(x);
    }
    
  7. 表示される値を答えよ。
    alert("30" + 1);
    alert("30" * 1);
    alert("30" + 2);
    alert("30" * 2);
    
  8. 表示される値をFirefox、IE6(IE7)それぞれについて答えよ。
      var x = new Object();
      x.foo getter = function() { return 30; }
      alert(x.foo);
      delete x.foo;
      alert(x.foo);
    
    解答は無し(試せばわかるかも)。
  9. 表示される値を答えよ。
      var a = new Array();
      a[0] = 0;
      a[1] = 1;
      a[2] = 2;
      alert(a.length);
      alert(a[2]);
      delete a[2];
      alert(a.length);
      alert(a[2]);
      a[20] = 20;
      alert(a.length);
      alert(a[20]);
    
  10. 表示される値を答えよ。
    alert('8' == 8);
    alert('8' === 8);
    alert('8' != 8);
    alert('8' !== 8);
    
  11. 表示される値を答えよ。
    alert(0x80000000 >> 1);
    alert(0x80000000 >>> 1);
    alert(-1 >> 1);
    alert(-1 >>> 1);
    
  12. 表示される値を答えよ。
    var a = 10 / 3;
    alert(a);
    a *= 3;
    alert(a);
    
  13. 表示される値を答えよ。
    var func = function() { return 80; };
    alert(func);
    

Javaを知ってる人もRubyを知ってる人もCを知ってる人も等しく驚愕するポイントが必ず1つか2つはある言語、それがJavaScript。

というわけでちゃんと知りましょうということ。

入門 JavaScript (My UNIX Series)(久野 靖)

_ JavaScriptパワーについて、ちょっと説明(12/31)

holidays-lさんの疑問「※これは関数ポインタを表示してるだけだから普通な気がするけど。何が不思議なのか誰か教えて」はもっともだと思うのでちょっと説明。

問13は、この話題が出たRHGがRuby系の読書会なので、関数の内容そのものが表示されるところがイイ! ということでした(ような。僕はそうとったけど)。抽象的な関数オブジェクトの表現とかではないところがミソです。Rubyのto_procとかProc#to_sとかにからんで。ちなみに、IEの出力は入力そのままだけど(多分。インデント変えたりはありかも知れない)、Firefoxだとちゃんとプリティプリントされる点とか、処理系ごとの出力内容の違いがおもしろいです。

あとgetterはnetscape系(現在はmozilla)固有なのでFirefox用ブックマークレットを書くのでも無い限り汎用的には知っていても役に立たないと思います。IEだとスクリプトエラーになってしまうので解答(実行例)を埋め込んでいないわけです。

その他についても一応。

4番は演算子の優先順位と、それだけではなく偽が0となるという振る舞い。ここで、ではfalseという定数はなんだ? と疑問を持つのが正しい。

5番は最初の2つは普通にブーリアンなのに次の2つが値となる点。Rubyだと(holidays-lさんによるとPerlもそうみたいですね。スクリプト言語だとこの仕様は便利なんだと思います)foo ||= default_value のように利用できるので重要ですが、Javaのような挙動を想定しているとちょっとびっくりするかも)

6番は、switch文の実行時にcaseの値が評価される点とかフォールスルーとか人によっていろいろ思うところはあるでしょう。

7番は、Rubyに深入りしていると間違える例で、最初の文字列結合を見てほおーと唸ってから次の*の結果を見ると、最後の結果が"3030"になるんじゃないかと深読みするかも、という問題。

9番は、ArrayといってもObjectと同じ連想配列じゃんというあたりかな。

10番は、===の振る舞いについての質問。Javaの振る舞いから見ると==がequalsで===が==な点とか。これも知っている言語によって印象が異なると思います。

11番は、Javaと正反対なのがおもしろい点。どちらもプリミティブを少なくするアプローチなので3重不等号が必要な点とか(Cから見るとなんじゃこりゃな演算子)、でも型システムが違うので自然な演算子の2重不等号の割り当てが異なるとか。

12番は整数型が無い(ただし>>などの演算子を処理する時点で32ビット整数に自動変換するのはあり)というのが驚きどころ。仕様を読まなきゃこれは驚くよなぁ、それにしても。ちょっと試してみると

alert(10 / 3 == 3); 

とか。

本日のツッコミ(全11件) [ツッコミを入れる]
_ ムムリク (2006-12-24 11:21)

JavaScript の入門書を探していたので候補にします。

_ arton (2006-12-24 12:39)

普通のプログラミング言語の入門書としては良いと思いますが、Web開発用のJavaScript本という実用性には難があるかなという気はします。

_ ムムリク (2006-12-24 16:49)

なるほど、そうですか。となると別にも探してみる必要はありそうですね。うーむ。

_ craf (2006-12-26 11:43)

私もオドオドしながらオープンライセンス購入したのですが、<br>1.発注する<br>2.「マイクロソフトオープンライセンス発注確認書」という紙が届く<br>3.書かれているライセンス番号を使ってMSサイトで登録<br>という流れでした。<br>ほんとサイトの作りとかもわかりにくかったです。

_ arton (2006-12-26 12:25)

なるほど。そういう手順なんですね。<br>では安心して待つことにします。どうもありがとうございます。

_ arton (2006-12-26 12:36)

上のコメントは修正済み(まだ発注してないようなこと書いたけど発注はしてるのであった。というか現在のサブスクリプションについての問い合わせが来てるし)。

_ 上美谷 (2006-12-26 14:09)

ちょうど昨日 Visual Studio with MSDN Subscription のページが更新されたらしく、<br>手続きの流れが分かりやすくなっています。<br>http://www.microsoft.com/japan/msdn/subscriptions/<br><br>それによると発注後48時間程度で番号がくるというような記述が。<br># 更新情報はMS系のどこかのRSSで読みました

_ arton (2006-12-26 15:17)

本当ですね。しかし額が額だから、不安になるよなぁ……

_ 「丸ごとJavaScript」拝読しました (2007-02-17 11:29)

getterキーワードを使用したゲッタの設定は非推奨であり、将来的には廃止される予定なので、__defineGetter__メソッドを用いたほうがよくないでしょうか。

_ 「丸ごとJavaScript」拝読しました (2007-02-17 11:31)

出典を忘れてました。<br>http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters

_ arton (2007-02-17 22:14)

そうですね。問題の意図は、Mozilla系では動作するものの、IEではページ全体がスクリプトエラーとなってまったく動作しなくなるため、利用してはならないということなので、いずれにしても、ECMAで仕様化され、IEでも利用できるようになるまでは使うべきではないと思います。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え