「インスタンス」を含む日記 RSS

はてなキーワード: インスタンスとは

2012-01-04

プログラミング初心者たわごと

JavaScript って生き物っぽいって思ったのがきっかけだった。

なんか菌?に遺伝子いれてたんぱく質生産させるやつ? Function は菌の細胞膜prototype遺伝子で、だから prototype全然関係ない違う生物遺伝子を生きてる菌に入れちゃったり。そうすると全然ちがうたんぱく質生産されたり。prototype にべべーっとコピーして追加するのなんてまさしくそれっぽい。

インスタンスからじゃないと複製できないのも生き物っぽい。

インスタンスって言い方になにか違和感があるなあ。

だってプロトタイプベースって、生き物しかいない世界じゃない?基本的に。インスタンスってのは生き物じゃない設計図があってそれにしたがって出来た生き物がインスタンスってイメージあんだけど。プロトタイプベース世界にはそんな設計図も生き物じゃないものもないよね?なのにわざわざインスタンスっていうのに何か違和感ご都合主義的なもの感じる。クラスは型で、インスタンスを実体だとかなんとかって氾濫してるせいかな。多分この辺の用語が JavaScript をわかりにくくさせてる気がする。

僕の感覚では、オブジェクトってのは生き物で、クラスベースってのは神が設計図に基づいて生き物を生産してる世界で、インスタンスベースってのは生き物が生き物を複製してる世界イメージだ。多分、原始の生物インスタンスベースみたいな世界で、海の中にうようよしてたんだろうな、とか。

オブジェクトじゃないものは、生き物じゃない死んでるたんぱく質RNA の破片みたいな。それだけじゃなにもできないみたいな。それだけじゃ命がないから、生き物の殻に詰めるってのが JavaScriptコンストラクタイメージ

Perl の bless したらこれはもう命入ったよ生き物だからねっあとは勝手にしてねってのも、Python名前空間さえあればなんとかなるよねってのも、JavaScriptハッシュさえあれば世界作れるよねってのも、みんなどこか似ている。ちゃんと OOP を理解できてるかは別としてもこの三つはわりとすぐやりたいことができた。昔 Java の本を買ってきて挫折したのにくらべたら、なぜかずっとわかりやすかった。(bless という命名はすごく洒落てる)

全然関係ないけど、Django日本語リファレンスは何か萌えるラクダ本日本語訳はむかつくのに。

プログラミングを始めたばっかりの時は、なんだか難しい用語の意味を理解しないと OOP がわからないと思ってた。それは僕らの住んでる世界とは全然関係のないプログラミング技術ってやつだと思ってた。

でも多分違う。

世界が動く仕組みさえあれば、あとは作り手に世界の成り立ちを抽象化する表現力さえあれば、世界勝手表現されていくし、動き出してく。たまたま僕らの世界オブジェクトもので溢れていて、プログラミング言語進化すれば世界に似るのも当然だろう。いや逆か。プログラミング言語世界に似てきたから、オブジェクトなんていう世界に似た概念が出てきたってことか。なんだか難しい用語ってのは、その表現の一部分の技術名前をつけてるだけなんだな、と。例えば何とか歌唱法や何々画法とか何とかレトリックとかパースの取り方みたいなのと同じ。それは表現を理解する手助けにはなるけど、その意味を知る事がイコール表現力をあげることにはならないんだよね。これに気づくのに遠回りしすぎたなあ。

(知識を得るだけで、100% 還元される人もいるかもしれないけど、そんなのは一部の天才だけだと思う。殆どの凡人はそうはいかない。とはいえ、元の錬度が低ければ、コツをいくつか教わるだけでいきなりうまくいくこともある。ただ、それをまるまんま実力だと思うのは、どんな分野でも危険だ。恋愛テクニックやらを必死に読んでる連中が男女間の深い人間関係を上手くやれてるとはちょっと想像できない!)

プログラミング表現力を上げるにはどうすればいいんだろう。きっと他と同じだろうな。いい表現を沢山味わって、世界をよく観察して、どう成り立ってるかどう動いてるか、私達はそれをどう認知しているのか、考えることかもしれない。漫画家を志す人が美術解剖学を学んだり、優れた画家が絵筆で世界を生々しく描写するように、優れたプログラマ世界のなりたちをプログラムに写し取ったり、世界の仕組みを作る事が出来るのだと思う。

やっとプログラミング面白くなってきた初心者より。

2011-10-17

http://anond.hatelabo.jp/20111017190024

継承とか、オーバーライドとか、インスタンスとか、良く知らずにサンプル引っ張ると死ぬだけだと思うんだが・・・

それ全部VBにあるよ

http://anond.hatelabo.jp/20111017185754

C#(やJava)が初心者を混乱をさせるとするならば、それはオブジェクト指向のせいではないと思うんだがどうかね。

どうかなぁ。

継承とか、オーバーライドとか、インスタンスとか、良く知らずにサンプル引っ張ると死ぬだけだと思うんだが・・・

2011-05-15

モテるstatic女子力を磨くための4つの心得

こんにちはプログラミングをしているただの女子です。私は学歴も知識もありませんしブスですが、staticに関してはプロフェッショナル。今回は、モテるstatic女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

 

1. あえてnewを使ってインスタンスを生成する

あえてnewを使ってインスタンスを生成するようにしましょう。そして飲み会の場で好みの男がいたら話しかけ、わざとらしくパソコンを出してインスタンス生成してみましょう。そして「あ~ん! この言語本当にマジでチョームカつくんですけどぉぉお~!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「プログラミングとか詳しくなくてぇ~! ずっとこのオブジェクト指向言語っていうやつ使ってるんですけどぉ~しっくりこないんですよぉ〜!いちいちnewって書かないといけなくて使いにくいんですぅ~! ぷんぷくり~ん(怒)」と言いましょう。だいたいの男はインスタンスを生成せずに、すべてstaticな関数プログラムを書く習性があるので、newなんてキーワードは使っていないはずです

そこで男が「static関数使わないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ~!最近SQLが人気なんでしょー!? あれってどうなんですかぁ? 実行時に一行ずつコンパイルするスクリプト言語と違って、もっとも高級な言語なんでしょ?でもなんかよくわかんなーい。私かわいそーなコ★」と返します。すると男は「あぁあいつね、あいつ俺の友達なんだ、イイヤツだろ」といってくるので、そのまま調子に乗らせておきましょう。



2. プログラムでとにかくstaticを使うとモテる

ファイルローカル関数」や「関数自体で状態を持つ」ことなどができる「static」をとにかく無闇につかうと、一般のstatic男性は「この子はstaticを愛してるんだなぁ」や「え?こんなところにもstatic使えるの?なにこれ?」と思ってくれますインターネット上ではそのような〇〇おじさんや、××おじさんなど、変なひとがいるので、よいこの皆さんは関わらないようにしましょう。

 

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

飲み会などで男が女性に話すことといえばstaticの話やVBの話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーそうなんですかぁ~?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女ダメだな」と気がついてしまいます。ダメ女だとバレたら終わりです。そこは無意味テンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。積極的に話を聞いてくれる女性に男は弱いのです

いろいろと話を聞いたあと、「staticな関数を使えば、newって書かなくていいんですねー。覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさしてくるくる回しつつ「キュンキュンキュン! キュンキュンキュン!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「うるせぇハゲ」と言えば女子力アップ! そこでまた男は「オブジェクト指向ってしっくりこないんですよね〜オブジェクト指向って(ry」と連呼して壊れだすので、放置しておきましょう。

 

4. プログラミングするときインスタンスを生成できない女をアピールせよ

男とプログラミングするときは、とにかく「あーん! 私インスタンス生成ないんですよねぇ~(悲)」と言いましょう。するとほぼ100パーセント「え?インスタンスなんて生成する必要ないじゃん。static理解せずにわざわざインスタンス宣言してるやつなんて笑っちゃうよね〜」といわれるので、(こいつなんなの・・・)と心のなかで思うだけにして口には出さないようにしましょう。ここでまた100パーセント「どうしたの?」と聞かれるので、うつむいて3~5秒ほど間をおいてからボソッとこう言います。「そうですよね〜staticおじさんカッコイイ〜」と心にもないお世辞を言っておきましょう。

その瞬間、あなた女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対にゲットしてやるぞ! コイツは俺の女だ!」と心のなかで誓い、あなたに惚れ込むはずです。そういうやつより上にのし上がったら、そんなことは忘れて好きなだけインスタンスを生成して大丈夫です。「インスタンスを生成できないんじゃなかったっけ?」と言われたら「は?」とか「うざい」や「おまえは一生C言語でもかいてろ」と言っておけばOKです

2011-04-10

1票を入れるという事は言い換えると・・・。

おれが貴重な時間を使ってわざわざ投票しに行く理由。

それは,’質の低い候補者’が 万が一にでも 当選するのを阻止するためだ。

うちの地区候補者が6人いる。

自分の好きな候補者に1票いれるということは

言い換えると

「それ以外の全ての候補者マイナス0.2票分のダメージを与える」

という事だ。

こんなふうに物の見方を変える事って大切だよね。

微力ながら,おれ様の1票で 

’質の低い候補者’の連中が間違って当選するのを阻止してやんぜ!

ちなみに旧帝卒TOEIC700です。 ( '‘ω‘`)

-----------------------------

カード情報

●おれの1票 (黒)(黒)(1)

インスタンス

・対象の候補者を指定する。

・場に出ているそれ以外の全ての候補者に 1÷人数 点のダメージを与える。

2011-03-16

ドラゴンボールで学ぶオブジェクト指向ツッコミ

http://anond.hatelabo.jp/20110316202255

亀仙流やつ鶴仙流など、世の中にはいくつかの流派があり、それぞれ
カメハメ波やドドン波、舞空術などの技(メソッド)がある。
実際に技を使う場合、技を覚えているZ戦士(インスタンス)が必要。

クラス = 流派

メソッド = 技

インスタンス = Z 戦士

というのはおもしろいと思うし, 例えばゲームを作るなら実際にそういう実装になると思う.

例)セルを作りましょう。
class Cell extends Goku,Veget,Picoro,Tenshinhan,Kuririn{
....
}
cell_inst = new Cell();
cell_inst.shotKienzan(); //Kuririnをextendsしているので気円斬が使えます

しかし, ここではクラス = Z 戦士になってしまっているので, 混乱を招くだろう.

むしろ, 「JavaScript における prototype」 に絞って説明するのはどうだろう.

(ついでに「撃つ」の現在形は shot でなく shoot ですね)

var Goku = function () {};
Goku.prototype.shootKamehameha = function () {
  console.log("波!!!");
};

var goku = new Goku;
goku.shootKamehameha(); // 波!!!

var Gohan = function () {};
Gohan.prototype = new Goku;

var gohan = new Gohan;
gohan.shootKamehameha(); // 波!!!

そしてセルによる吸収は, 動的な継承として考えるのがより自然だろう.

var Goku = function () {};
Goku.prototype.shootKamehameha = function () {
  console.log("波!!!");
};

var Vegeta = function () {};
Vegeta.prototype.shootBigBangAttack = function () {
  console.log("ビッグバンアタック!!!");
};

var Cell = function () {};
// 吸収メソッド
Cell.prototype.absorb = function (target) {
  for (var method in target) {
    this[method] = target[method];
  }
};

var goku   = new Goku;
var vegeta = new Vegeta;

var cell = new Cell;
cell.absorb(goku);   // 悟空を吸収
cell.absorb(vegeta); // ベジータを吸収

cell.shootKamehameha();    // 波!!!
cell.shootBigBangAttack(); // ビッッグバンアタック!!!

そして次にクロージャの使用例として挙げられた次の例.

例)連続エネルギー波
var shotRenzokuEnergy = function( count ){
	var shotEnergy = function(){
		//エネルギー波を放ちます
	};
	for(var i=0;i<count;i++){
		shotEnergy();
	}
};

この実装では, shotRenzokuEnergy を実行するたびに shotEnergy が毎回定義されてしまい, 非効率である.

以下のように書き換えることで, shootEnergy の定義は, shootRenzokuEnergy の定義時の 1 回のみとなる.

var shootRenzokuEnergy = (function () {
  var shootEnergy = function () {
    console.log("エネルギー波!!!");
  };

  return function (count) {
    for (var i = 0; i < count; i++) {
      shootEnergy();
    }
  };
})();

shootRenzokuEnergy(10); // エネルギー波!!! x 10

http://anond.hatelabo.jp/20110316202255

実際に技を使う場合、技を覚えているZ戦士(インスタンス)が必要。

Z戦士によっては複数の流派の技が使えたり、自分の技を人に教えることが出来る(継承

インスタンスなのかクラスなのかはっきりしろよ・・・

セルを作るならZ戦士(インスタンス)を継承しなきゃならんぞ

JaavaScript なら Cell.prototype = goku でいいかもしれんが・・・、ある時点での goku をとかってことになるとすごい大変じゃないか

瞬間移動が使えないセルと瞬間移動が使える悟空。そして使えるようになったセル・・・みたい

ドラゴンボールで学ぶオブジェクト指向

オブジェクト指向の基本

亀仙流やつ鶴仙流など、世の中にはいくつかの流派(=クラス)があり、それぞれの流派にかめはめ波どどん波舞空術などの技(メソッド)がいくつかあります

実際に流派にある技を使う場合、技を覚えているZ戦士(インスタンス)が必要になります

例)亀仙流を覚えた孫悟空を使ってかめはめ波を放って敵を倒す
goku = new KamesenRyu("goku");
goku.shootKamehameha(teki);

Z戦士によっては複数の流派の技が使えたり、自分の技を人に教えることが出来ます継承)。

また悟空クリリンのように同じ流派でも同じ技で違う性能を持っていたり、オリジナルの技を持っているなどの違いがあります

クラスセルを作るためのZ戦士達の遺伝子情報と言っても良いかもしれません。

例)セルを作りましょう。
class Cell extends Goku,Veget,Picoro,Tenshinhan,Kuririn{
....
}
cell_inst = new Cell();
cell_inst.shootKienzan(); //Kuririnをextendsしているので気円斬が使えます


世界の成り立ち

世界プログラミング言語)によってはただの人を後付でZ戦士にすることが可能です

(JavaScriptRubyなど)

noumin = new Hito(); 
noumin.kougekiKuwa = function(){
	//戦闘力たったの5…ゴミめ!
};

noumin.shootKamehameha = function(){
	//な、なんだと!?
};

農民がいきなりかめはめ波うつようになったら危険ですね、危ないです。

このように後付でメソッドを追加出来るタイプ危険性を含んでいます。



クラスインスタンス

http://anond.hatelabo.jp/20110316204446

インスタンスなのかクラスなのかはっきりしろよ・・・

セルを作るならZ戦士(インスタンス)を継承しなきゃならんぞ

とても良いつっこみが来たので追記します。

前半部分ではZ戦士をインスタンスしましたが、セルを作るにはZ戦士がインスタンスでは出来ないので

なのでZ戦士それぞれをクラスという形に再定義しました

何をインスタンスにして、何をクラスにするかが「設計」なんですね。

何がインスタンスで何がクラスか、加えて説明します。

セルの第一段階ではGokuなどのZ戦士の遺伝子があれば作ることが出来ました

cell_inst = new Cell(); //このセルは第一段階

でも第二段階以降は人造人間17号、18号が必要でしたね。

cell_inst.absorb(17gou); //第二段階に変身
cell_inst.call18gou();
cell_inst.absorb(18gou); //最終段階に変身

class Cell ....{
   function call18gou(){
        if(!this.17gou)return error(); //17号を吸収していないと失敗する
        this.17gou.speak("****略*****ドクターゲロ様****略****");
   }
}

この場合、17号と18号はそれぞれインスタンスです

17gouを吸収したので、17号の声で18号を呼ぶことが出来るようになりました

でもドクターゲロ「様」って言ったのでセルだってバレバレですね。

かいセリフは忘れたのでどなたか資料を下さい…。



追記

コメントへのレスを追加。

http://anond.hatelabo.jp/20110316224648


追記2

クロージャについてちゃんと書こうと思って挫折。どなたか良いアイディアを下さい。

変数スコープ解説する必要があるかなと思ったんですオブジェクト指向からは外れるような気がします。

エネルギー波→連続エネルギー波がどこかに使えそうな気がしましたが、気のせいだったぜ…

追記3

続編書きましたhttp://anond.hatelabo.jp/20110319020332

2010-11-22

C言語すら知らなかった云々の記事がちょっとひどい

http://www.lastday.jp/2010/11/22/objective-c

 

早速Objective-Cとやらを勉強しようと思ってググってみたら、Objective-CC言語拡張なので先にC言語を学ぶ必要があるという驚愕の事実が発覚!

ググる前に公式ドキュメント読もうよ。

 

この文書はC言語については解説されていないため、C言語にある程度慣れていることが前提となり ますしかし、それほど熟達している必要はありません。Objective-Cによるオブジェクト指向プロ グラミングはANSI Cの手続き型プログラミングとはかなり違っているので、熟達したCプログラマで なくても、さほど不利にはなりません。

  

Objective-Cプログラミング言語 日本語

http://developer.apple.com/jp/devcenter/ios/library/japanese.html

 

Cの知識があるに越したことはないけども、どこまで必要かという話になるとごにょごにょ

少なくとも、Objective-Cを公開している連中が、"Cの手続き型プログラミングとはかなり違う"と言っているのだから、C言語的なコードの流れには(あんまり)ならない(はず)。

それより、フレームワークの扱いに慣れることに重点を置いたほうがいいんじゃないかな。

苦Cで言うところ、文字列やら、ファイルの取り扱いあたりになってくるとかなり微妙で、出来る限り言語機能やフレームワークに任せたい

ポインタはそりゃ、Python使いが見たら発狂するんじゃないかってぐらいポインタ演算子が出てくるけど、オブジェクトインスタンスは全部ポインタなんだから、いっそ気にしなくていいんじゃない? それとも関数ポインタとか使いたい? きっとデバッグが大変だよ。

 

YouTubeVimeoで『Xcode tutorial』で検索すると大量のiPhoneプログラミングチュートリアル無料で視聴可能です!

動画は全部英語

公式の「iOS アプリケーションチュートリアル日本語版)」を読んだ上で言っているのであれば、どこの誰が作ったかも分からない英語動画が、アップル公式の日本語ドキュメントより優れている点を挙げた上で、その動画URLを示して欲しい。

英語なんて分からないよ。

 

初心者オススメです。この本を読めばiPhoneアプリ自分でも作れるかもしれないと思えるようになります

オススメってことは必読じゃないのかな?

 

3.初期投資

Intel Mac + iPhone or iPod Touch + 10,800円

ここから、開発者プログラムの参加費用$99(¥8000程度)を差っ引くと、一冊分しか残らないから、下の方で紹介されてる本が必読なんだろう。

 

たのしいCocoaプログラミング[Leopard対応版]

初心者にわかりやすくObjective-Cの事が書かれています。必読です!

こっちが必読?

内容全く知らないで発言するけども、書評を見てみると、Snow Leopard対応していない旨が書きこまれていて、多少不安

流行りに乗ってMacbook Airを購入した人は、大抵Snow Leopardのはず。

記事には、"二ヶ月前"からとあるので、少なくとも記事を書いた人はMacbook Airではないのだろう。

 

自分アプリの必要な部分だけを勉強すれば、それだけリリースも早くなりますモチベーションも下がりません。全部網羅しようと思うと開発自体を頓挫しかねません。

遅延評価勉強法の考えで行くと、C言語を先に勉強する必要はなかったと思うけど、どっちなんだろう。

その辺も遅延で気付いたのかな。

 

英語力がなくてもアプリは作れますが、英語がわかると公式ドキュメントや先にあげたYouTubeチュートリアル動画も理解できるので簡単な英語くらいはできる方が良いです。

日本語の公式ドキュメントがあるので、是非参照して頂きたいです。

 

iOS Reference Library日本語

http://developer.apple.com/jp/devcenter/ios/library/japanese.html

Apple Developer Documentation日本語

http://developer.apple.com/jp/documentation/japanese.html

 

 

日本語ユーザが増えたら、Xcodeのクイックヘルプとかドキュメントとかも日本語化してくれないかなあ。

それとも、実はただの調査不足で既にあったりとか…

2010-01-24

プログラミングって右脳だな

プログラミングしてる時って、クラスインスタンス変数やメソッドの使い方、ロジックの流れなんかは脳の中でイメージ化されてる

アルファベットだからかもしれない

あんまり言語って感じじゃないんだよな

それよりもパズルに似てる気がする

2009-09-30

http://anond.hatelabo.jp/20090930000930

たしかにjavascriptをきっちりマスターすれば、それは強みになるかもしれない。

しかし、いかんせんアクが強すぎる。王道になり得ない。

まず、javascriptだけで完結しない。どうしてもサーバイドが絡む。

いや、javascriptで完結できるよ、と思うかもしれないが、それは特殊だ。ニッチだ。

何を言っても今のところ、javascript組込み言語の域を出ていない。

実行環境が特殊過ぎる。

ファイルシステムがあってプロセスがあってネットワークがあるOSに透過な環境で動かない。

DOMがあってHTTPデータが運ばれてシングルタスク的な環境になってる。

そして、クラス/インスタンスモデルではなく、プロトタイプチェーンモデルだ。

初心者が最初に深く突っこむ言語としては特殊過ぎる。

サーバソフトウェアから使い捨てプログラムまで書くような言語ではない。

第二言語止まりだ。母国語にならない。

プログラミングの体験には良いかもしれない。オブジェクトを体験するには良いかもしれない。

しかし、程々にして他の言語に移った方が良い気がする。

javascriptを極める前にマルチリンガルを目指せ。

……。

当たり前か。

一つの言語で満足できるわけない。

プログラミング勉強するならJavaScriptもCもpythonもついでにjavaperlも。

2009-08-20

delegate

C#VB.NETも使った事があるのに、恥ずかしながらdelegateというものが何だか良く判っていなかったので、ちょっと調べてみた。

http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_017/csharp_abc01.html

かなり適当な理解。

2009-08-09

http://anond.hatelabo.jp/20090809183815

提示したコードアレ過ぎ。

背景も知らないし調べもせずにそんなコードをとりあえず書き換えるならこんな感じ。

適当自分の好みを入れているのでツッコミ入れたくなる人もいるだろうけど。

int rc = RC_SUCCESS;
boost::shared_ptr<ObjA&gt; a = createA();
if (!a)
  rc = RC_ERROR1;
if (rc == RC_SUCCESS) {
  boost::shared_ptr<ObjB&gt; b = createB();
  if (!b)
    rc = RC_ERROR2;
}
return rc;

ちょっと言葉が汚いけど簡単に書くと

  • そこでgotoは要らないだろ
  • 型名がObjAとかObjBとかなにそれ?
  • int型でRC_なんちゃらじゃなくて列挙型使えよ(intでしょうがないか、というケースはあるけど)
  • createAとかcreateBってインスタンスを作っぽいけどそれで合ってる?その上でなんでそれを使ってないの?何をやりたいか分かり難いよ。設計おかしくない?

2009-08-04

雲をつかむような話

今朝の日経1面に日立とか富士通クラウドに100億づつ投資、みたいな煽り記事が出ていて気持ちが暗くなる。VM の個別のインスタンス毎に(OSアプリレベルの)設定は違うし、RDBMS を明日捨てるわけにもいかないだろうから、物理的なサーバスイッチの構成が多少均一化されたところで自分の知識が1年後には全く無用になっている筈もないのだが。とりあえず VM ハイパーバイザと hadoop 等の練習はしといたほうがいいかも、ただ未経験なら採ってはもらえないらしいからやっぱりジョブリレバンスは疑問。



クラウドというのは廃熱は減らしても物理ノード数を減らす方向には行かない(Core 7i をやめて Atom を複数並べる方向ということ)から、大手系列チェンジニアにとってはむしろ朗報なのだと思う。DC電源化もなんともいえない。やっぱり AC で行くような気がする。iSCSIイーサネット給電も(IP電話端末を除けば)普及していないし。

2009-07-08

本当にnewっていらない子

なんかPerlのblessっぽい。

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

というよりperlのnewっぽい。なぜか。

classクラス定義してnewでインスタンスを生成する言語を「一般的オブジェクト指向言語」とすると、

つまり、javascriptでnewを(直接)使わず、class(のようなもの)を作ればperlっぽくなる。

そもそもnewって何するの?

オブジェクトを作る。オブジェクトを作るには3つの動作が必要である。

  1. 領域を作る
  2. クラスと結びつける
  3. 初期化する

通常は言語仕様でこれらを行う"new"という命令が用意されている。しかし、必ずしも必要な物ではない。perlでは言語仕様としてはnewが用意されていない。new関数が存在するのはコーディング規約に従っているからに過ぎない。代わりにblessが用意されている。なぜこのようになっているのか。理由はいたって簡単だ。perlオブジェクトの実態はリファレンスだ。初期化を行うコンストラクタはどの道定義せねばならない。だから必要なのはリファレンスパッケージを結びつけるおまじないblessだけだ。コンストラクタで好きなリファレンスを用意し、好きなように初期化してblessすればよい。コンストラクタ名前コーディング規約でnewと決めた。一方javascriptはnewを用意した。{}でオブジェクトは作れるし、どの道コンストラクタは作る必要があるのに。

そもそもblessって何するの?

オブジェクトクラスを結びつける。しかし、javascriptクラスを持たないので必要はない。代わりに必要なのは、継承元との結びつき、プロトタイプチェーンの構築だ。

そもそも継承って何するの?

既存のクラスの性質や振る舞いを流用する。default状態を与える。一般的オブジェクト指向言語ではクラス定義時に継承元となるクラスを指定する。javascriptではクラスの代わりにオブジェクトを指定する。

そもそもクラスって何するの?

クラスとはオブジェクトの性質・振る舞いの定義だ。しかし、ダック・タイピングではオブジェクトの性質や振る舞いはオブジェクトの持つメンバにより決まるため、そのような環境ではオブジェクトに初期値と継承関係を与えるのが主な仕事となる。

そもそもコンストラクタって何するの?

コンストラクタオブジェクト初期化を行う。javascriptではクラスがないため継承コンストラクタによりオブジェクト初期化される。

つまりコンストラクタ継承すれば良いんじゃね?

var object = function(o) {
  var F = function() {};
  F.prototype = o.prototype;
  return new F;
};

JavaScriptのnewって本当にいらない子?(http://d.hatena.ne.jp/jdg/20090706/1246840565)

個人的には

var object = function(o) {
  var F = function() {};
  F.prototype = o;
  return new F;
};

で良いんじゃね?って思う。

更に、コレでは初期化しないから

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

みたいな。

さらにせっかくだからメソッドにして

var object = function(o, n) {
  var F = function() {};
  F.prototype = o;
  f = new F;
  if (not f.inherit) f.inherit = function(n) {object(this, n)};
  if (n) for (var i in n) f[i] = n[i];
  return f;
};

とか。



しかし、なんでこんなに今の継承機構は使いづらいのか。

2009-05-21

Javaの本を買うつもりがJavascritpの本を買ってしまったでござるの巻

冗談はおいておいて、

いい加減覚えておかないと行けないなと思ってJavascript勉強しだしたんだけど、

インスタンスに対してメソッドを追加できるということをしってなんかこうスライムみたいなとらえどころのない言語なのかなという印象。

めざせamachang

2009-05-14

http://anond.hatelabo.jp/20090514155750

OK。長々とつきあってくれてありがとう。君の主張は理解できたと思う。

「全てのカラスは白い」というエントリに対して

元増田が「見たことないわ。白い事にしたいんじゃないの。叩きたいが為に」と返した。

そこへ横増田

「ホシガラスを知ってるか。あれは白いんだぞ」

と返したわけだ。

さて、誰がそこでホシガラスの話をしたいのだろう?

それなら元増田の反論がそもそもおかしい。反証としては「白くないカラスが(少なくとも一羽)存在する」で必要十分だった。ここで全否定するからおかしなことになる。それに元増田が本当にホシガラスを知ってなお「白いカラスなんて見たことない」と言っているのかどうかは本人以外(あの文章からは)わからない。したがってホシガラスの例を指摘する意味はある。

余談ながら個人的になぜ今更栗本薫なんぞを引っ張ってくるんだ?

栗本でなくてもいい。任意の一例だから。腐女子集合の1インスタンスでありさえすればいい。繰り返すがtheでなくaなんだ。彼女腐女子を代表する好例と思っているわけでもない。ただ簡易に提示可能だったから引いたまでにすぎない。ついでに言うと私は彼女のまとまった著書をほとんど読んだことがない(中島梓名義の,拒食症についての論考1冊)。君はよくよくテキストを特定文脈に位置づけて読みたがる人なんだなという印象をもった。これを読解力というなら確かに私は読解力に欠ける。

記事削除するんだったら元記事改竄しても同じだと思う。

潔く鉛筆マーク押して直せばいいのに何故そんな面倒な方を選んだんだい?

記事を再編集している間に元記事に対してレスされることをおそれたから。消すのは一瞬だからその方が再編集するより元記事の露出時間は短くなると考えた。結果としては無駄な面倒だったね。

2009-03-24

名付け方

ギークではないし、どちらかといえば下手なのですが。

http://anond.hatelabo.jp/20090324005857



  1. インスタンス名をどうするか
  2. 生成したインスタンスを格納する配列名前をどうするか
    • その集合を現す名前があるはず。

例えば、サムネイルを作る makeThumbnails という関数なら、

result = array.new()
while(src = gets())
    result.add(Thumbnail.new(src))
end
return result

かもしれないし、例えばサムネイルを一覧表示時のアイコンに使うなら、index_iconsとか、gif化してアニメーションするならframesとかつけるかも。

ちなみに、perlなら $frame = shift @frame だ。

whileの内側だけで使う一時変数なら名前は短く一文字とか、他にも処理があるならtmbとか、thumbとかにするかも。

インスタンス名とか配列名のつけ方

プログラムの初歩的な質問なんですが、

たとえばサムネイルを一覧表示するプログラムを作ってるとして、

次の場合、インスタンス名とか配列名とか、どうやったらうまくつけられるんでしょうか?



1.処理:各サムネイルは、Thumbnailクラスインスタンスとして生成

  このときインスタンス名をどうするか

  >生成されるインスタンスサムネイルなんだから、thumbnailじゃないの?



2.そうやって生成したインスタンス配列に格納することにする。

  このとき、配列名前をどうするか

  >サムネイルの集合だからthumbnailsじゃないの?



できたプログラム(処理:サムネイルインスタンスを作って配列に格納する)


(前略)
thumbnails = array.new();
while(img_pass = gets())
  thumbnail = Thumbnail.new(img_pass)
  thumbnails.add(thumbnail)
end
(後略)

という感じで後から見るとわけわかんなくなるんだけど、

この場合どう命名したらわかりやすかったのでしょうか。

ギークの皆さん助けて!

2009-03-16

増田に複数のインスタンスを立てれればいいのに、とふと思う。

2009-02-22

もしも、あの言語で駅の券売機を作ったら

http://anond.hatelabo.jp/20090220065041

Brainf*ck

8つしかないボタンの順番を正しく押さないと目的地への切符が買えない。

COBOL

普通の英文による注文で切符が買えるハズなのだが、実際には専門家に頼んで注文を書いてもらわないと上手く買えない。

LOGO

亀を出発駅から到着駅まで移動させることで切符を買う。

Haskell

出発駅と到着駅の型が違う場合、適切な経由駅を設定しないと切符が買えない。

C++

任意の切符を発行するためのビルダーテンプレートインスタンスを生成できる。

JavaScript

切符は他の切符コピーで作られるため、切符をどう印刷するかについてのプログラムはまったく入っていない。

Prolog

到着駅と出発駅を入力すると、到達可能であることが示される。切符は出てこない。

Malbolge

この券売機切符が買えるのかどうか、まだ証明されていない。

Java

どの駅でも同じ操作で切符が買えるハズなのだけど、実際のところは微妙に違ってぬるぽで落ちる。

FORTRAN

カンマとピリオドを間違えて券売機が爆発。

- 転職ならen
- 派遣ならen
2ページ中1ページ目を表示(合計:38件)