孤独プログラマー譚

孤独死が近い。

CoffeeScript Privateメンバ

= で定義すれば、private : で定義すれば、public となる。Privateメンバは、コンストラクタ関数内のローカル変数として、 クロージャによって保持されている…と考えることが出来る。 class Sony # public pubVar: 'nogi46' pubFunc: -> console.log '乃木坂…

今さらCoffeeScriptでクロージャ

仕事でCoffeeScriptを使っている。練習も兼ねて、クロージャを書く。CoffeeScript、Rubyと似ている…。 素のJavaScriptと比べて、色々と省略できすぎるため、初見では何を書いているかさっぱり分からない。 引数を2倍にする関数、3倍にする関数を返す。 facto…

elseif・switchは撲滅して連想配列

前回に引き続き、今回も同じテーマで。以下、憎くて仕方ないelseif文。 id = 'nogi' if id == 'nogi' then name = '乃木坂46' elsif id == 'keyaki' then name = '欅坂46' else name = 'ソニーミュージック' end p name # 乃木坂46 本当にキモい。 たいした…

elseifやswitch文は連想配列に置き換えてポリモーフィズム

elseifやswtich文は出来るだけ避けたい。 一連のスクリプトから状態を排除したいし、後々の改修で誰かがネストしまくるのが想像できる。置き換えるには、Stateパターン等を使う必要があると思っていたが、実は連想配列で解決できることに気付いた。以下、よ…

Ruby 委譲

Rubyの便利な委譲な仕組み。一つ目。Forwardableモジュール。 class Sony extend Forwardable def_delegators :@keyaki, :discord def initialize(keyaki) @keyaki = keyaki end end class Keyaki def discord print '僕は嫌だ!' end end sony = Sony.new(K…

Rubyでクロージャ

JavaScriptでよく見るクロージャを、Rubyでもやってみる。 JavaScript 関数スコープ ・内側から外側の変数は利用できる。 ・外側から内側の変数は利用できない。 Ruby ブロックスコープ ・内側から外側の変数は利用できる。 ・外側から内側の変数は利用でき…

Ruby Procを触る

引数にブロックを取る関数。 def doSomething(something, &toDo) toDo.call(something) end PHP = 無名関数 Ruby = ブロック という考え方で良いと思う。以下、do から end がブロック。 Rubyでは、ブロックも引数の一種に考えるイメージだろうか。 doSometh…

PHP Proxyパターンを楽に実装する

Proxyパターンは有用である。最近知ったから使ったことないけど。例えば、以下、RobotクラスとMissileクラス。 ロボットクラスは、ミサイルの発射をミサイルクラスに委譲している。 missile = new Missile(); } function launchMissile() { $this->missile->…

JavaScript ツリー構造はCompositeパターン

ツリー構造といえばあれだ。 営業部 ┗ 1課 ┗ 山田 ┗ 鈴木 ┗ 2課 ┗ 佐藤 みたいになってるやつ。デザインパターンには、このツリー構造をうまく処理できる「Compositeパターン」というものがある。だが、ツリー構造自体、扱う機会が特に無かったので、Compo…

JavaScript Decoratorパターン

Decoratorパターンの良いところは、 主体となるオブジェクトと、処理を委譲しているオブジェクトの間に、スッと割り込ませることが出来ること。 そして、その処理を委譲しているオブジェクトには、傷をつけなくて済む。Decoratorでラッピングするか否か、動…

ループの中のif文が現れたら、Observerパターンを検討する

やはり自分はObserverパターンを理解していなかった。Observerパターンは、多種多様な輩をループで回す時、真価を発揮する。以下、よく見るケース。JavaScriptで。 function Student(name, sex) { this.name = name this.sex = sex } var students = [ new S…

Javascript 関数のデフォルト値設定の罠

今まで何気なくやってた、関数のデフォルト値設定。 function foo(a) { var a = a || 1; ... } 実は愚かな行動だったと知った。JavaScriptの「&&」「||」について盛大に勘違いをしていた件 - Qiita例えば、 foo(0); // 1 引数が 0 や false の場合、意図どお…

ECMAScript6 let・ループ・ブロックスコープ

ES5以下がだいだい分かってきたような気がしたから、ES6に手を出していくことにした。以下の挙動が意味不明だった。 var callback = []; for (let i = 0; i < 3; i++) { callback[i] = function () { console.log(i); }; } callback[0](); // 0 callback[1](…

JavaScript バブリングの活用

例えば、以下のようなHTMLがあるとする。 <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> ... x 1000 ! </ul> <li>をクリックした時のイベントハンドラを登録したいとする。jQueryで普通に書くとこうなる。 $('li').on('click', function () { console.log(this.textContent); }); (19ms)ピュアJSで書くと</li>…

Drupal8 FormクラスでGET通信を使う

カスタムモジュールで、Formクラスを使う時の話。デフォルトはPOST通信になる。「設定を変えればGET通信なんて余裕だぜ、はははー」 なんて思いつつ、以下に設定。 setRequestMethod($request->getMethod()); // 'GET' 時の分岐 isMetho…

JavaScriptのコンストラクタとプライベート変数

まず、コンストラクタを使うこと前提で。コンストラクタ内でメソッドを定義する場合、プライベート変数を使うことができる。よくあるカウント機能を持つサンプル。 function Nogi() { var count = 0; this.say = function () { count++; console.log(count);…

Observerパターンについて考える

Observerパターン、名前は知ってるけど、いまいち使いどころがよく分かりませんでした。「状態の変化を通知する仕組み」とのことですが、あまりそういう状況に出くわさないというか、頭にピンとこないというか…。調べてみたんですが、おそらく自分は勘違いし…

結局、JavaScriptはどう継承すればいいのか

結局、JavaScriptはどう継承すればいいのか。 調べてもサイトによって書いてる事が違うので、ひとまず、信用できそうな方法を以下にまとめます。 (非 ES6 です。) 乃木坂46の秋元真夏を親クラス、相楽伊織を子クラスとします。 2期生の相楽は、1期生秋元の…

デコレータパターンでテンプレートメソッドを使う(PHP)

うーん、今までデコレータパターンを勘違いしてた。 デコレータパターンは継承と書き換え可能でした。 デコレータは動的に継承っぽい関係を作れるので、その点メリットがあります。 ただ、どの程度書き換え可能なのか…? 自分はテンプレートメソッドをよく使…

JavaScriptを超シンプルなMVCで書く(2)

以前の記事「JavaScriptを超シンプルなMVCで書く」を見返すとイマイチなので書き直し。 lonely-programmer.hatenablog.jp 以下挙動のアプリケーションを作ります。・ボタンをクリックする毎に、白石麻衣の所属するグループが、乃木坂46 / 欅坂46 / SKE46 の…

Riot.jsでモデルっぽいものを書いてみる

Riot.jsを初めて触ってみた。 あまりにシンプル過ぎて驚いた! ほとんど覚えること無しに、それなりに書けそう。というわけで、前回・前々回の流れで、簡単なサンプルをRiot.jsで書いてみます。悩んだのが、Riot.jsにはモデルが見当たらない…? おそらく、Ob…

Backbone.jsでCollectionを触ってみる

Collectionを触ったことが無かったので、簡単に触っておこうと思います。Cllectionは複数のModelを突っ込める器のようなものです。 DBに例えると、Modelがレコードだとすると、Collectionはテーブルになります。以下、コードの全容。 タスクリストのようなア…

Backbone.jsで超シンプルなMVCを書く

前回はピュアなJavaScriptでシンプルなMVCを書くという趣旨でしたが… 「フレームワークを使った方がシンプルに書けるのでは?」 という考えが巡り始めたので、今回は前回の内容をBackbone.jsで書き換えます。Backbone.jsを簡単に説明すると… 日本語に訳して…

JavaScriptを超シンプルなMVCで書く

単一のWebページに、簡単なイベントハンドラを3つ、4つ程書きたい。 でもJavaScriptフレームワークを使う程の規模ではない。 本能の赴くままにイベントハンドラを書いてたら、訳が分からなくなってきた。 触るとバグりそうなので、もう触りたくない。 上記の…