はてなキーワード: レキシとは
感情がない、何も感じない、それを出せない。
ヒントを一応文章という形で羅列します。しかし、ヒントの羅列と捉えてもらえるとありがたいです。
自分が必要だと思う部分を掻い摘んで読んでみてください。直訳したような文章になってしまいました、悪しからず。
●『好き・嫌いの嗜好すらそもそもない人』
次に、例えば、モノの好き嫌い。
それは何かを感じるからです。で、こいつはこうだから好き、こいつはこうだから嫌い。
自分の意見も出ます。この感受性を高めて下さい。そのためにはもっと「触れる」「知る」ことです。
で、ここで言いたいこと。その肝心の「感情」とは、「喜怒哀楽」。
何か物事が起こった時、それに対して「感じる」力が弱いのです。
自分の意見が言えない人は特に、「怒り」の感情が弱いと思います。
自己肯定感が低い、自己否定感が強い人は、何かあった時にそれを全て自分に帰属しやすいです。
それはあいつが悪いんだろ、って普通思う局面で、僕が●●だから悪いんだ。
これはいじめとか虐待とかされてた人、周りから否定されてきた人に強いと思います。
理不尽な否定に対して、認知的不協和が起こるために、自己否定感を持ってしまう。
これを止めるコツ。それはべき思考を消し、自分の感情を素直に受け止め、それを一旦出すこと。
怒っちゃいけない、怒りの感情がある時は、それを一旦出す(自分の内にはそれを認めること)。
たとえ、自分が一方的に悪いことでも、怒られればムカつくし、情けなくもなります。
それは逆ギレという形で出せ!というのではありませんが、怒りの感情を抱いたことは事実でそれは認めてあげることです。
その上で、冷静に考える。これをちゃんと出来て初めて、「感情のコントロール」が出来るようになるのです。
怒りを抑圧すれば、いずれ爆発します。感情を抑えれば爆発するか、何も感じなくなります。(失感情症=アレキシサイミア)
酒飲んで暴れる人間とかはこの典型です。
しかし、これも有効に活用出来ます。酒を飲んで吐き出したくなる感情が普段抑圧しがちな感情です。
・心揺さぶられる(擬似)体験をする・心揺さぶられるものに触れること。映画、音楽、TV、スポーツ。なんでもいいです。
自分が好き!!と言えるものを探して下さい。泣いて下さい。笑って下さい。笑いが出たらわざと大げさに笑い、涙が出たらもっと泣こうとして下さい。
・その時に出来れば、感情豊かな人の真似をして下さい。
「芸能人、DQN、幸せそうな人、失恋した人、外国人。それらの真似をすることで感情が出やすくなります。」
芸能人のようにわざとらしく泣き、笑い、DQNのように怒り狂い、ウエディングドレスを来た新婦(新郎)のように幸せに身を委ね、失恋した人のように悲しみにくれ、外国人のようにオーバーリアクションをしてみてください。感情は感情ありきでないというか、笑顔になるから楽しい、眉間にしわを寄せるからムカつく、と表情に牽引されて出るものでもあります。
※わざとDQNと書きました。
自分が嫌いなもの、苦手なもの、こうなりたくないというもの、をイメージして下さい。
それは、そうなれないもの、では無いですか?? それが自分のコンプレックスを刺激するものでは無いですか?ある意味羨望。
だとしたら、一旦それを真似して下さい。地面につばを吐いて、店員に悪態をついて、街を肩で風をきるように、歩いてみて下さい。
自分がなりたいイメージがある、変わりたい場合、あえて真逆を言ってバランスを取るのも手段の1つです。
アサーティブとは、自分も相手も台頭ということです。(詳しくは、「アサーション」等でググって下さい。)
自分が何者であるか、そのバックグラウンドがあまり関係ない場です。ネットとかもそうですよね。
●『恋愛をしてください』
…ここまで書けば、何をすればいいか分かりますね??
そう、『恋愛』をして下さい。
アサーティブな関係で、自分の絶対的な「好き・嫌い」、「喜怒哀楽」を出すことの許される関係です。
そして、自分を忘れ、恋に走り、歓び・傷ついて下さい。理性を忘れ、自分の思うがままに相手を求め、SEXして下さい。
『恋愛』…ああ、言いたいことはそういうことね。俺には無理だわ。クソ記事乙ww
こういう自己否定的、斜に構えて物事を見るのを止めて下さい。こういう人はYESマンになって下さい。
物事をそれをする前から、自分には向いてる/向いてない、意味がある/ない、出来る/出来ないで判断しないで下さい。
そんな「効率」や「要領」なら捨てて構わないです。それを誇って生きられるのは、ネットの世界だけですから。
コストパフォーマンス・仕事の効率化…熱量を失った人間ばかりです。それは死に物狂いで何かをして、何かを得た人間がやればいいことです。
あなたは、ネットで難しい言葉で相手を言いくるめ、論破し、罵倒し、勝ち誇った気持ちになれるかもしれません。
自己を肥大化させて万能感でもって、愉しく生きているのかもしれません。
だからこの記事の中にも、批判しやすいように「餌」を何個か用意しました。それを叩いてくれてもかまいません。
しかし、実態は「感情」を持った、人間なのです。感情を失ったら機械です。理性を失ったら動物です。
人間が素晴らしいのは、感情も思考能力(理性)も持っているからなのです。しかし、ベースは感情です。
感情があるから物事を考えることが出来るのです。感情、それは「あなた唯一無二のもの」です。
我思う故に我有り。思うのは、考えられるのは、感じることができるからなのです。
客観性・妥当性だけで生きていたら、平凡な人間にしかなれません。
その平凡さを否定するために、人を蹴落として自分の価値を高めるつまらない人間にしかなれません。
文芸春秋が先月出した単行本で、「理系の子」というのがある。書評を検索したところ、おおむね好評であるようだ。
たしかに本はとても面白かった。登場人物はそれぞれ個性的だし、エピソードは魅力的で印象に残る。構成もよく練られていてとても読みやすい。
だが、おれは気に入らない。この本は文系の著者による文系の読者のための文系ならざるところはない本だからだ。あいまいで科学的厳密性に欠けるものだからだ。
たとえば、第二章では、「太陽エネルギーによって部屋を暖め、湯をわかすヒーター」が登場する。著者は次のように説明している。
太陽の光がプレキシガラスを通過し、光を最大限に吸収するよう黒く塗られた炭酸飲料の缶に囲まれたラジエーターを暖める。そこから暖かな光がパイプを通じて部屋へ送られ、室温を摂氏三十度以上にすることができ、さらに沸点近くの九十五度くらいまでの湯をわかすことも可能だというのだ。
お前らこれでどんな装置か想像できるか。水温測ったら九十五度でした、以上の情報はおれには読み取れない。
ラジエーターは何のためについてるんだ?装置内で水は循環してるのか?そういう説明は一切ない。
また第六章では、水中のポリフルオロオクタン酸(PFOA)の濃度を正確に計測する方法として
PFOAを含む水を煮詰めて振り、表面にどれほどの泡を生じるか観察するだけでいいのではないか?
と書いている。いいわけないだろ。あのな、お前本当に知らないかもしれないから言っておくけど、界面張力ってすごく微妙で他の有機物はもちろんちょいと無機塩が溶けるだけで変わってきちゃうんだぞ。
そして、この測定法について「この方法でも九十二パーセントの精度で水に含まれるPFOAの量を測定できることがわかった」と書いているが、九十二パーセントの精度ってどういう意味なのかおれにはわからない。測定誤差が八パーセントってことか、ばらつきが九十二パーセントあるってことか、どっちだよ。
測定誤差が八パーセントなら測定誤差が八パーセントと書くべきで、訳文から感じ取れる「こんなに正確に測れるなんてすごい!」的ニュアンスからすると多分こっちかなあという気がするが、でも一○八パーセントの方はどうなっちゃうの、と思わざるを得ない。あるいは、この方法は簡易測定法なんだから、ばらつきが九十二パーセントあったって充分有用なのかもしれない。でも、それならそれでもうちょっと他の書き方があるだろ。測定誤差が大きい測定法なのに、そのことについて触れないとしたら、それは不誠実な態度ってもんだ。
第十一章はカーボンナノチューブネタだが、ナノ粒子についてこう書いている。
お前なあ、と書いて終わらせたいところだが、一応二点だけ突っ込んでおく。
髪の毛のおよそ十万分の一、というのは「髪の毛の太さの十万分の一」というつもりだろうが、太さという重要なタームを省略する感性は理解しがたい。それに、髪の毛の太さが何ミリかお前ら知ってるのか。おれは知らない。ナノ粒子ってすごく小さいんですよ、と言いたいのならもっと具体的にイメージできるものと比較しろよ。「分子よりもわずかに大きいだけだ」って、大きさをどう評価するべきか、という議論も可能だし、そもそも粒子と分子を無造作に並記する鈍感さにうんざりさせられる。
他にもいくらでもあるが、以上を要するに、著者は彼らの研究内容を理解していない。
そして(著者略歴によれば)他の雑誌はともかくWiredに寄稿していることからして、自分が理解していないということは認識していただろう。つまり、理解しようという気がなかったと断定していい。この本の帯には「科学はこんなに楽しく、熱い」と書いてあるが、著者が書いているのは科学の楽しさや熱さではなく、参加した高校生が楽しんだり熱中したりしているその姿である。著者にとっては、そしておそらくこの本のメインターゲットであろう多くの文系の読者にとっては、研究内容などどうでもいいことなのだ。
消費される娯楽。この本に対するおれの評価はそれに尽きる。こういう本が出版されること自体が遠まわしな科学へのdisではないのか。
http://anond.hatelabo.jp/20110316202255 - ドラゴンボールで学ぶオブジェクト指向
また、ポイポイカプセルのように技を塊にして色んな人が使えるように出来ます。
var shotKamehameha = new function(){ //かめはめ波を打ちます。 } noumin.kougeki = sendKamehameha; buruma.kougeki = sendKamehameha; noumin.kougeki(); //カメハメ波がでます。
って書いてるけど、クロージャってのはそういうものじゃないよなぁ、と。 まあファーストクラスの関数オブジェクトっていうところはあってるけど、それだけでクロージャと言えるのかというとちょっと違う。
"a closure is a first-class function with free variables that are bound in the lexical environment." (Closure - Wikipedia) とあるように、関数内の変数がレキシカルスコープに結び付けられているようなものがクロージャなのである。 JavaScript で例を書くなら、次のようになる。
// クロージャを返す関数 var getClosure = function getClosure() { // クロージャからアクセスされる変数 var counter = 0; // クロージャ var closure = function closure() { return counter++; }; return closure; }; // クロージャを取得 var closure = getClosure(); // クロージャを実行 closure(); //=> 0 closure(); //=> 1 closure(); //=> 2
id:aionarapです.自分のブログがなく,ブコメじゃ情報を書き足りないのでこの場をお借りしました.
“徒弟制度”や修士論文の廃止求める 大学院博士課程で中教審答申 - MSN産経ニュース http://sankei.jp.msn.com/life/news/110131/edc11013122040003-n1.htm
はてなブックマーク - “徒弟制度”や修士論文の廃止求める 大学院博士課程で中教審答申 - MSN産経ニュース http://b.hatena.ne.jp/entry/sankei.jp.msn.com/life/news/110131/edc11013122040003-n1.htm
この中教審の答申に関して,ブコメでは否定的な意見が多数,というか肯定意見は皆無ですね.しかし,私個人はある程度この試みに賛成です.あ,先に書いときますが,完全肯定じゃないですけどね.修論は書いたほうがいいし,徒弟制の完全廃止もどうかとは思っています.
じゃぁ何が賛成なのよ,という話ですが,Qualifying Examの導入,及び広い範囲の教育に関してです.これは必須,と私は考えています.この辺りのお話に関するご意見を皆さんに聞いてみたいと思い,当エントリを書くことにしました.
今回の中教審の答申は,博士の現状の問題を反映した意欲的な取り組みに感じる.丸呑みにするには良くない部分もあるが,期待しても良いのではないのか.
さて,そもそもの出発点ですが,博士は「スペシャリスト」でありさえすれば良いのでしょうか?私は否と考えます.博士こそ「ジェネラリスト」にもならねばならない.…と書くと誤解を招きますね.要は専門馬鹿になっちゃいかん,ということです.
勿論,博士課程の人間は自分の専門分野に関して,国際的な第一線に立てるような知識と経験が必須です.一生懸命に自分の研究に取り組む必要があります.ですが,それだけではダメで,最低限隣接領域(まぁ定義が微妙ですが)に関して,可能であればもっと大きな枠組で知識を深めなきゃいけません.科学技術はどんどん煮詰まってきて,先に進むためには学際分野の融合による新しい概念の創出が必要です.それをイノベーションと呼ぶこともあるでしょう.それを生み出すためには,少なくとも2つの分野に関してよくものを知っていないといけません,そうですよね?
テクニシャンとして分野を極めるのもひとつの道かもしれませんが,博士に求められているのはそういうことではないと私は考えています.
加えて,博士が「スペシャリスト」のみを意識していると,博士課程の人材の活用先は研究者,それもかなり狭い分野に限定されます.
ここで,大学院設置基準が定めている博士課程の役割を見てみましょう.昭和49年の時点では,
「専攻分野について,研究者として自立して研究活動を行うに必要な高度の研究能力及びその基礎となる豊かな学識を養うことを目的とする。」
「専攻分野について,研究者として自立して研究活動を行い,又はその他の高度に専門的な業務に従事するに必要な高度の研究能力及びその基礎となる豊かな学識を養うことを目的とする。」
と,敢えて変更を行っています.差分は,
「又はその他の高度に専門的な業務に従事するに必要な高度の研究能力」
「社会の多様化,複雑化等に対応し,博士課程において,大学等の研究者のみならず,社会の多様な方面で活躍し得る高度の能力と豊かな学識を有する人材を養成する必要から明確化」
(以上,http://www.mext.go.jp/b_menu/shingi/chukyo/chukyo0/toushin/05090501/021/003-3.pdfの2ページ目より引用.)
平成元年の時点で,大学院設置基準は博士課程学生に「社会の多様な方面で活躍しうる」人材たることを求めているのです.
「おいおい,博士が研究者にならなくてどうするのよ…」という意見もあるでしょう,それは理解します.ですが,包含関係を取り違えてはいけません.研究者として生きて行けるのは,博士号を取得したうちの一部の人間です.研究者になるのは博士号取得者でしょう.ですが博士号取得者は全員研究者にはなれません.国家として,限られた国庫の中から博士を全て取り込めるほどポストを恒久的につくるのなら別ですけどね….
それに,(ありえませんが)もしそうなったとしても,全員研究者になるのもどうかと思います.一人ひとりが研究テーマを持って,プロジェクトリーダー的な役割を果たしつつ,世界の最先端を突っ走ってきた人間が,その経験と知見を他の分野に持っていくことは非常に意義があるでしょう.ある意味,一人でプロジェクトチームに求められる役割を全て果たす必要があるのですから,その能力は推して知るべしです.是非,社会のあちこちで活躍するべきです.
非常にポピュラーなのは,専門を活かした職業でしょう.企業での研究開発を初めとした「明示的に博士を求めている」職業は多いです.…まぁ敢えて書く必要はないですね.
初等,中等教育の教師もいいでしょう.勿論高専も.起業もいいですね.
そして,本当はその他の「博士が求められていない」と考えられている職業にも行ったほうがいいと思うんです.だって,ずっと知的体力を鍛えてきたわけですから,同年代の博士号非保持者と比較してその辺りは大きくリードしているはずです.
彼ら/彼女らが持っている問題発見能力は,必ずや企業にとって大きな助けになります.
前節の内容に関して,同意して頂けましたでしょうか?して頂けた方も,そうでない方もいらっしゃるでしょう.
でも,同意/非同意にかかわらず,ほとんどの人は「夢物語乙!www」という感想を抱くのではないでしょうか.いえ,私もそう思います.
例えば,id:scicom 氏の快著,「博士漂流時代「余った博士」はどうなるか?」(http://goo.gl/Pd0ls amazonへのリンク)には現状の博士号取得者,特にポストドクター(PD)の状況が整理されています.
簡潔に言えば,現状は散々たる物です.企業は博士号に魅力を感じていません.これは伝聞ですが,採用担当者は「博士は当たり外れが大きい」と感じているようです.ハズレを引くリスクを恐れて採用を控えるそうです.
そもそも,皆さん,博士号をとっている人間が「最低限」「共通して」何を出来るか,分かりますか?
言い換えると,博士号が担保しているものは何か,知っていますか,ということです.
特に,博士課程では,①学生に特筆すべき顕著な研究業績を求める大学院もあるなど,博士の学位が如何なる能力を保証するものであるかについての共通認識が確立されていないこと,②博士課程(後期)の教育が,個々の担当教員がそれぞれの研究室等で行う研究活動を通じたものにとどまり,学位プログラムの整備という観点から不十分であること,③大学と産業界等との間において,大学院が養成する人材像と産業界等の評価や期待に関する認識の共有が十分でなく,修了者が産業界等の社会の様々な分野で活躍する多様なキャリアパスが十分に開かれているとは言えないこと,といった問題点が見られる
(http://goo.gl/Jq0LU, pdfファイル,5ページ目)
文科省は,博士号が担保するものに関する共通理解は無い,と述べています.また,教育の質もバラけていることを指摘しており,このことも共通理解の妨げになるかと思います.
個人的には,博士号は「専門知識」と「プロジェクト(研究)遂行能力」は担保していると思います.…が,サンプル数が少ないので断言はできません.
この「一般的な博士像の不存在」が,世間一般への博士の浸透を妨げていることは想像に難くありません.
当の本人たる博士号取得者は活躍の場が減る,すなわちたつきの道の選択肢が減ります.
納税者の皆さんは,せっかくお金をつぎ込んで育てた人材が有効に活かされず,「税金の無駄だ!」と感じるかもしれません.
後進の学生は,この惨状を見て博士に進まなくなります(というかそうなってます).
こうして,本丸たるアカデミックの世界ごとジリジリと衰弱し,…あとは言わずもがな.
勿論,「これさえやれば万事解決!」みたいな簡単な処方箋はないでしょう.でも,チャレンジは出来ます.
私は,そのチャレンジの一環が今回の中教審の答申だったのではないか,と考えています.(というか資料はそれを物語っています)
専門の知識だけではなく,基礎知識や計画力,語学力,倫理観などもちゃんと持っていることをQualifying Examで保証しましょう.
どこに放り出しても生きて行けるほど強くするために,総合的な教育もちゃんとしましょう.
そういった取り組みが,今回の答申の意図ではないのでしょうか.
この新課程を出た博士がその有用性をアピール出来れば,在野の博士号取得者にもスポットが当たり始めるでしょう.
さて,ここで,「大学院に進んでまで人に教育を受けるとかwww自分で学べよそれぐらいwww」という気持ちになる人もいるかもしれません.
正直,私も「それぐらいじぶんでするわい」と思ってたりします.
でも,主眼はやっぱり「質の保証」なんだと思います.ちゃんと大学院は「最低限」「共通して」一定の能力を持った博士を輩出しますよ,という保証.
さぁ,経営者の皆さん,安心して共同事業を博士が経営するベンチャーと行って下さい.
さぁ,保護者の皆さん,安心して博士の教員を迎え入れてください.
そういう事を,皆が自信を持って主張できるように,ということでしょう.
ええ,上記の効果を狙ったとしても,逆効果になる部分もあるでしょう.
徒弟制を完全廃止すると,一本軸の通った研究ができなくなって,結果として「スペシャリスト」にもなれなくなります.
(念の為に再度主張しますが,博士は「スペシャリスト」の能力を最低限備えてなければなりません,と考えています)
博士課程に進学希望の学生が修士論文書かないと修士/博士の間のフレキシビリティを損なうことになります.
なので,細かい部分は考える必要があるでしょう.
でも,今回みたいに,現在抱えている問題に対してちゃんとコミットメントしたということで,私は文科省をちょっと見直しました.
というかなんか雰囲気で「お役人は肝心なことに取り組まない」みたいな思い込みがあったのですが,やっぱりそんなこともないよなぁ,と思いました.
なんせ,前述の「博士漂流時代」を読んで気になったことを調べ始めたら,殆ど中教審の資料にまとめられていたのですから.
さて,長くなりましたが,これにて本エントリはお終いです.お付き合い下さり誠にありがとうございます.
.NETでオブジェクトの永続化によく使われる、この二つのクラスの違いについて書きます。サンプルコードなどは書きませんので必要ならリンクを参照してください。ずいぶん古いネタだけど、許してね。
全体的に速度が重要な場合か永続化するオブジェクトが単純な場合はXmlSerializerを、それ以外の場合はSoapFormatterを使うのが良いと思う。なるべく短いコード量で行きたいならSoapFormatterの方がベター。
あと、細かいことだけどTypeConverterは便利なので使うべし。シリアライズ不可能な小さなクラスとか特に有効。
普通にクロージャという場合、レキシカルスコープを持つことを期待されると思うけど、DLLやらsoからエクスポートされる関数は普通のCのスコープだからクロージャとは言わないと思うよ。(そもそもDLLもsoも標準C/C++じゃないから、もしこれらがクロージャ的な動きをするとしてもこれを以て「Cのクロージャ」と呼ぶのはおかしいというのは置いといても。)
ダイナミックスコープなemacs Lispのlambdaとか、ダイナミックスコープもどき(っていうのか?なんて表現したらいいか分からん)なPHPのcreate_functionは動的に作りはしてもクロージャとは言わないんじゃないかな。
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
おれはもうMooseしかつかわねぇ。後にも先にもMooseMooseMooseMooseMoose!!!!!!!!!!!1111111
ってな人の為にいつでもどこでもMooseする。automooseを実装しますた。
package automoose; use strict; use warnings; sub import { strict->import; warnings->import; } package automoose::before; use Moose; no Moose; package automoose::after; use Moose; my @before = keys %automoose::before::; my @after = keys %automoose::after::; my @exports = do { my %u; @u{@before} = (); grep { !exists $u{$_} } @after }; package UNIVERSAL; use Moose; for my $func (@exports) { __PACKAGE__->meta->remove_method($func); __PACKAGE__->meta->add_method($func,sub { my $class = shift; my $auto = $class.'::__auto__'; no warnings 'redefine'; local *Moose::_get_caller = sub { return $class }; Moose->import( { into => $auto } ); my $code = $auto->can($func); $class->meta->add_method($func,sub { shift; goto $code; }); goto $code; }); } 1;
使い方はいたって簡単。useするだけ。
use automoose; my $obj = Foo->new;
いきなりnewが呼べちゃう。
他にも
use automoose; Foo->has( hoge => is => 'rw' ,default => 9999 ); Foo->has( muge => is => 'rw' ,default => 7777 ); print Foo->new->hoge; print Foo->new->muge; Bar->extends('Foo'); print Bar->new->hoge;
ょーかんたん。げーべんり。
しっかしこれ、automooseだけど実装するの結構めんどかったのよ。Moose-0.44をベースに作ったんだけどさ。
Moose内部で使用している$CALLERって変数がレキシカルなもんだから、どうやってそれを外から制御すればいいのかすんごい苦労したわけさね。
で結局importの引数にinto渡してさらにMoose::_get_caller関数を上書き無理矢理ハックしたってわけさ。
でもね。でもね。でもね。ちょっと聞いてよ。
ふと最新のMoose-0.50見てみたらさ、Moose::__CURRY_EXPORTS_FOR_CLASS__なんて関数が定義されてるわけよ。
外から明示的に$CLASSを変更できるインターフェイスなわけよ。おいおいおいおい、勘弁してくれよ。こっちゃ折角苦労してハックしたのにあっさり公式対応するなってばよ。メゲルヨ?ぼく。
まぢめげるよ。めげる。ってかもうめげたよ。もうMooseなんてつかわんね!つかわんね!
Mooseなんて大嫌いだー!
俺はMooooooooooseをやめるぞぉおおおおおおおおお、JOJOぉぉぉおおおおお!!!!11
javascriptで存在するほとんどのオブジェクトの実体はハッシュだよ。
var arr = [0,1,2,3];
とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。
これは
var has = {0:0,1:1,2:2,3:3};
と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。
ためしに
arr[4] = 4; arr['x'] = 'string'; arr[-1] = -1;
としてみよう。
Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。
でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。
それどころかarr.xで'string'がかえってくるんだ。
別の例を見てみよう。
var fx = function(){}; fx[0] = 'somestring';
こうするとfx[0]に'somestring'が束縛される。
つまりfunctionも一つのハッシュだったんだ。
これでほとんどのものがハッシュだということが解ってくれたかな?
ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。
ハッシュへはhash[name]でアクセスすることが出来る。
それ以外にもnameが演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。
これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。
関数には名前を付けなくても使用可能だよ。
function(x){return x+x}(2); -> 4
関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?
function funcname(args){ do something};
でもこれはsystax sugerだってことを知ってほしい。
上でも使ってるんだけど。
var funcname = function(args){ do something};
と等価になる。もちろんどちらの書き方でもかまわないよ。
ただ、(無名)関数を宣言してそれをfuncnameに束縛しているっていうことを理解しておくと便利だよ。
javascriptはレキシカルスコープを採用してるんだ。
レキシカルスコープなんていうと難しく感じるかもしれないけど、結構単純なんだ。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){var x = 'local';return x}
これの実行結果は以下になるよ。
fx1() -> 'global' fx2() -> 'local' fx1() -> 'global'
fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。
でも以下のような場合に注意してほしいな。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){x = 'local';return x}
fx1() -> 'global' fx2() -> 'local' fx1() -> 'local'
fx2は自分のスコープに変数xがないからその外側スコープに探しに出かけたんだ。
つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。
別の場合を見てみようね。
var x = 'global'; var fx1 = function(){ var x = 'local'; return function(){return x} }; var fx2 = fx1();
x -> 'global' fx2() -> 'local'
この例だとfx2()の値がlocalになってるね。
なぜなら外側スコープっていうのは関数を評価した場所じゃなくて、関数を定義した場所の外側なんだ。
一つ上の例では実際に関数を返り値にしているね。
var fx1 = function(){ var x = 0; return function(){ x = x+1; return x; } }; var fx2 = fx1(); var fx3 = fx1();
fx2() -> 1 fx2() -> 2 fx2() -> 3 fx3() -> 1 fx3() -> 2
fx2とfx3の値が違うのはそれぞれ別の関数が作られるからだよ。
こんな風に関数が状態を持つことも出来るんだ。クロージャーとよんだりするよ。
関数がハッシュを使って複数の関数を返すとこんなことも出来るよ。
var fx = function(){ var x = 0; return { 'up':function(){ x = x+1; return x; }, 'down':function(){ x = x-1; return x; } } }; var obj = fx();
obj.up(); -> 1 obj.up(); -> 2 obj.down(); -> 1 obj.down(); -> 0
thisという機能があるよう。ちょっとだけつかってみるね。
var x = 0; var add = function(n){this.x = this.x + n; return this.x}; var mul = function(n){this.x = this.x * n; return this.x}; var obj = {'x':0,'do':add};
add(1); -> 1 add(1); -> 2 mul(2); -> 4 obj.do(); -> 1 obj.do(); -> 2 obj.do = mul; obj.do(); -> 4
thisは評価された場所によって値がかわるよ。
objの中にいるときはobj.xを扱うし、グローバルにいるときはグローバルのxを扱うんだ。
http://anond.hatelabo.jp/20070620200618を改訂してみたよ。
このぶんしょうがjavascriptを覚える上の一助になるとうれしいんだ。
あとここでつかってるハッシュは伝統的な意味。連想配列のことね。
突っ込みも大歓迎だよ。
javascriptで存在するほとんどのオブジェクトの実体はハッシュだよ。
var arr = [0,1,2,3];
とかをみると配列(人によってはリスト)に見えると思う。でも実際は違うんだ。
これは
var has = {0:0,1:1,2:2,3:3};
と基本的には等価なんだ。ただちょっと束縛されているメソッド(インターフェイス)が違うだけ。
ためしに
arr[4] = 4; arr['x'] = 'string'; arr[-1] = -1;
としてみよう。
Firebugで確認してみると[0, 1, 2, undefined, 4]というような値がかえってくるよ。
でもarr[-1]やarr['x']の値は保存されてないのかな?そんなことはないちゃんとアクセスできるんだ。
それどころかarr.xで'string'がかえってくるんだ。
別の例を見てみよう。
var fx = function(){}; fx[0] = 'somestring';
こうするとfx[0]に'somestring'が束縛される。
つまりfunctionも一つのハッシュだったんだ。
これでほとんどのものがハッシュだということが解ってくれたかな?
ハッシュじゃないのは文字列とか数字とかそいういシンプルなものだけなんだ。
ハッシュへはhash[name]でアクセスすることが出来る。
それ以外にもnameが演算子や空白を含まなくて頭が数字でない場合はhash.nameでアクセスできるんだ。
これでhash[name]が関数だったらhash.name(args)とできるよ。まるでメソッドみたいだね。
javascriptはレキシカルスコープを採用してるんだ。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){var x = 'local';return x}
これの実行結果は以下になるよ。
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'global'
fx2の変数xはほかの場所に影響しないんだ。これは関数の中と外ではスコープが違うからなんだ。
でも以下のような場合に注意してほしい。
var x = 'global'; var fx1 = function(){return x}; var fx2 = function(){x = 'local';return x}
fx1() -> 'global'
fx2() -> 'local'
fx1() -> 'local'
fx2は自分のスコープに変数xがないからその外側スコープに探しに出かけたんだ。結果fx
つまり宣言文varはそのスコープに新しい名前を登場させる機能なんだよ。
関数宣言の書き方って次見たいの覚えてる人が多いんじゃないかな?
function funcname(args){ do something};
でもこれはsystax sugerだってことを知ってほしい。
上でも使ってるんだけど。
var funcname = function(args){ do something};
と等価になる。もちろんどちらの書き方でもかまわないよ。
関数は返り値として関数はハッシュを指定できるよ。次のハッシュを返す関数を見てみよう。
var fx = function(){ var x = 0; return { 'x':x, 'add1':function(y){this.x = this.x+y;return this.x}, 'add2':function(y){x = x+y;return x} } } var obj = fx();
実行結果を見てみよう
obj.x -> 0 obj.add1(0) -> 0 obj.add1(0) -> 0 obj.x -> 0 obj.add1(1) -> 1 obj.add1(0) -> 0 obj.x -> 1 obj.x -> 1 obj.add1(0) -> 1 obj.add1(2) -> 2 obj.x -> 1
となる。
add1はthis.xにたいして演算をしている。つまり返された値が変化しているんだ。
add2は関数fxに閉じ込められた値に対して演算している。つまりこれらは別の値なんだ。
とここまでかいたら疲れた。
読んでくれた人ありがとう
ちゃんとまとめてなかったし、自分のブログに描いても見てくれる人はいないから増田に書いてみたよ。
ほかの言語や技術についても同じような解説が欲しかったら何らかの方法で言及してくれるとうれしいな。
ここまではてブが300突破してるみたいだけどいま、自分のブログへリンクを張ったら増田に書く意味がなくなるんじゃないかと思うんだ。
やらないけど。
こんなのもかいてみたよ、増田で。 http://anond.hatelabo.jp/20070621153600
「ブロック付きメソッド呼び出し」がわからん、ということでいいのかな。この概念は是非とも解ってほしいので、今日始めて Ruby を触った俺が頑張って解説しよう、と思ったけれど、いいドキュメントを見つけたのでリンクしておくよ。
これで解らんかったらOn Lispを途中まで読みんさい(お金がないならWeb 版をどうぞ)。「ブロック付きメソッド呼び出し」は元々関数型言語の界隈で「レキシカルクロージャ」と呼ばれるもので、要するに中身は一緒なのでクロージャが解れば「ブロック付きなんたら」も解る(Ruby を触ったことのない自分が「ブロック付きなんたら」を理解しているのはこれの為)。 On Lisp は Common Lisp という言語の本なんだけど、 Ruby は言語仕様の多くの点で Common Lisp を参考にしているので、勉強するのはそれほど難しくないと思う(つまり見た目はヘンテコだけど中身は Ruby ってこと)。