タグ

ブックマーク / tanakahisateru.hatenablog.jp (11)

  • PHPが糞言語なのはどう考えても参照をポインタだと思っているお前らが悪い - なんたらノート第三期ベータ

    この投稿はPHP Advent Calendar 2013の12日目の記事です。 PHP恒例行事の参照と三項演算子のdisりですが、そろそろあさってな議論はやめませんかという話です。 今年のPHP-dis大賞といえばこちら。 PHPとかいう糞言語|いんまのブログ ※ 追記: これ書かれたのは2012年でしたすんません。 なんで君たちそんなコードが必要なのかね、と。結論から先言うと、きみたちがPHPが使えないって思うのは、そんな挙動に左右されるようなコードを書くからでしょ、だからCとかRubyとかそういう簡単な言語でわかった気になっている初心者はまったくもう...というわけでPHPの言語文法の基礎んとこ、いきますね。 まず、PHPのarrayは「値」です。もちろん文字列も「値」です。値は値なんだけど、それはミュータブルです。PHPのarrayもしくは文字列の代入は、一見すると、ポインタを使わ

    PHPが糞言語なのはどう考えても参照をポインタだと思っているお前らが悪い - なんたらノート第三期ベータ
    raimon49
    raimon49 2013/12/12
    >LLな言語の変数がミュータブルなのはしょうがないですが、であるからこそ、別のスコープではできるだけイミュータブルな値であるように意識して扱うのが、うまいプログラムのお作法 / 参照渡し良く使ってたの4.xまで
  • HomebrewでPHP環境 現時点でのまとめ - なんたらノート第三期ベータ

    MacでHomebrewを使ってPHPの開発環境を作るまとめです。 HomebrewはMacPortsより圧倒的にコンパクトなのがメリットです。MacPortsでPHPをインストールすると、/opt/localに、Apacheを含め、すごい量のパッケージをインストールされます。PHPのビルドにApacheのライブラリが必要で、さらに、Apacheのビルドには...という具合。これだと、容量あたりの単価がかかるSSD搭載のMac bookがかわいそうですね。HomebrewのPHPは、MacOSにApacheがあるのを知っているので、依存が浅くて軽いです。 MAMP.appがあるじゃないかという人はちょっと待った。あのパッケージ構造、httpd.confとphp.iniとmy.iniがどこにあるかすごくわかりにくいんですよね。そのうえ、使っている拡張の最新バージョン追従が個別にできないのは辛

    HomebrewでPHP環境 現時点でのまとめ - なんたらノート第三期ベータ
  • PHPのinterfaceなめんな - なんたらノート第三期ベータ

    はいタイトルは釣りです。 OOPのインターフェースはただの実装漏れチェック機能じゃないし、ましてや継承は差分プログラミングツールじゃないぞ。というのはわりと一般的な話だけど、Ruby(respond_to?でホントにいいの)とJava(インターフェースが自然すぎてユーザが意識しないのよ)が、PHPに対してOOPどうこうで偉そうに言うのはどうかなと思ったもので。まあそれと同時に、PHPの人自身がその意義を発見してるのかなという疑問もあったりしたんですけどね。 Rubyというのは「オブジェクト指向ってのはつまりメソッドに応答できるアヒルはみんなアヒルとみなせるよね」というレベルのダックタイピングで割り切った言語だと、個人的に認識しています。継承とミックスインにはis_aが応答するけど質はrespond_to?のほうで、インターフェースを宣言してなくてもメッセージ送れたらいいあの感じ。 そんな

    PHPのinterfaceなめんな - なんたらノート第三期ベータ
    raimon49
    raimon49 2012/03/03
    マーカーインターフェースで分岐して安全にダックタイピング。Javaではコンパイル時分岐→オーバーロード、実行時→マーカー
  • GitHubでプルリクエスト用ブランチを保守するメモ - なんたらノート第三期ベータ

    GitHubにリポジトリを置いてる人はみんなプルリクエストを待っています。けどプルリクエスト用にフォークした自分のリポジトリを保守する方法が途中でわからなくなって...という人が案外多いんじゃないかなと思ったり。なので、ちょっとメモ置いときます。って、人のためみたいな言い方ですが、まあ自分用のメモです。 まずこうしたほうがいいという原則。masterブランチはフォーク元から変更せず、かならず自分用のブランチを作る。これは、masterを作業の同期用に置いておくためです。 自分のブランチでコミットしたあと、フォーク元のmasterが進んでないかのチェックは必ずすること。 もし進んでいたら自分のmasterに元作者のコミットを取り込んで自分のGitHubでのフォークが最新と同期してる状態にしましょう。で、元作者のコミットログを確認して何が起こったのかを理解しましょう。 $ git checko

    GitHubでプルリクエスト用ブランチを保守するメモ - なんたらノート第三期ベータ
    raimon49
    raimon49 2012/02/12
    rebaseした後でpushしようとして![rejected]となった時に焦らないために。リモートの巻き戻しは勇気の要る行為(forkだから良いんだろうけど)。
  • PHP 5.4.0 Alpha3 でこういうコードが書けるようになる - なんたらノート第三期ベータ

    何も言いません、これ見て驚いたらいいですよ。PHP5.4.0 Aplpha3 で実際に実行できたプログラムです。もう大興奮ですよ。 Pythonだともっといろいろ書けるよ、とか、Rubyはmixin最初からあるよとか、その変数スコープJSだと当たり前すぎるとか、そういうツッコミはノーサンキューで、PHPでこれが動くということが重要なんですってば。

    PHP 5.4.0 Alpha3 でこういうコードが書けるようになる - なんたらノート第三期ベータ
    raimon49
    raimon49 2011/08/28
    PHP5.4.0 Aplpha3 trait
  • PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ

    PHP5.4にはトレイトという文法が導入されて、多重継承の便利さが享受できるようになるそうです。 いろいろ試してみることにしました。 トレイトといえば代表選手はScalaですね。Scalaでいうトレイトは、インターフェースの定義とメソッドの実装を同時にやってくれる便利な概念でした。単一継承のOOP言語では「〜は〜の一種」という制約が強すぎて、「ペンギンは鳥の飛行メソッドによって飛行できてしまう」という問題があります。でもちゃんと「ペンギンは飛べないが泳げる鳥」を綺麗に解決する必要はあって、その解答として、トレイトのあるScalaではこんな解が導けます。 abstract class Animal abstract class Bird extends Animal { def hasBeak = true // 鳥にはかならずクチバシがある def hasWings = true // 翼

    PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ
    raimon49
    raimon49 2011/07/11
    実はPHPのtraitはScalaのtraitよりもRubyのmix-inに近かったという話。
  • Pinoco0.4はクロージャですごくなる - なんたらノート第三期ベータ

    Pinoco0.4.0をリリースしました。 Downloads · tanakahisateru/pinoco · GitHub 変更点はこちらで簡単に。 Changelog · tanakahisateru/pinoco Wiki · GitHub 重要な点は、データベースをサポートしたところ。もちろん単にPDO用のライブラリあります、ってだけではなく、Pinocoのコレクションでうまく動くようにあれこれしています。その基礎になるのが、Pinoco_Varsに追加されたregisterAsLazyメソッド。簡単にいうと、これで設定したプロパティは遅延評価で値を決めるというもの。実際にアクセスされるまで値の決定を遅らせます。いちど決まれば再決定のためにコストのかかる処理をしません。 また、Xdebugがない環境でも、通常のPHPエラーにスタックトレースが付いたり、捕捉しそこねた例外がすごく

    Pinoco0.4はクロージャですごくなる - なんたらノート第三期ベータ
    raimon49
    raimon49 2011/06/05
    遅延評価
  • 続・話すようにプログラムするPythonチュートリアル - なんたらノート第三期ベータ

    話すようにプログラムするPythonチュートリアル - なんたらノート 第二期の続きです。前回は努力と根性でどうにかなるところまでやりました。今回は、前回再び泥臭いコードになってしまったプログラムを、もっと綺麗にしてみようと思います。 前回はできるだけ一般的な言葉で説明してみました。今回は、既存の概念とそれに対するよりPython的な方法を説明します。前回が知恵と根性なら、今回は知識の力を借りよう、という感じ。標準には含まれていませんが、とても便利なのでPythonデコレータが熱い - なんたらノート 第二期で紹介した、decoratorモジュールも活用します。 デコレータで質/属性の分離 Python2.4から、デコレータ記法が増えました。例のdefの前の@です。以前から、「関数を入力して関数を出力する関数を使って、既存の関数を書き換える」というトリック(デコレータの質はコレ)はあり

    続・話すようにプログラムするPythonチュートリアル - なんたらノート第三期ベータ
    raimon49
    raimon49 2010/06/01
    デコレータ, itertools, メモ化。何回か読み返したい。
  • 話すようにプログラムするPythonチュートリアル - なんたらノート第三期ベータ

    Pythonでえらくハッキッシュなコードを書き散らして遊んだ 3の倍数と3が付く数字だけアホになり、5の倍数だけガルマっぽくなるスクリプトにチャレンジ - なんたらノート 第二期 うえ、他人のエッセイをえらくこき下ろし OOコード養成ギブス - rants OOコード養成ギブスとやらが人気らしい。 - なんたらノート 第二期 て、われながら生産性のないやつだと思うので、ここは逆に、Pythonチュートリアルをひとつ書いてみようと思います。 まず最初に、こんなプログラムがあったとさ。 #素数の数列を返すアルゴリズム def prime_numbers_until(limit): prime_numbers = [] for n in range(2, limit): divider_found = False # 1より大きくその数より小さい範囲で調べる for m in range(2,

    話すようにプログラムするPythonチュートリアル - なんたらノート第三期ベータ
  • Rubyはどのへんの生産性が高いのか - なんたらノート第三期ベータ

    分裂勘違い君の Rubyの生産性の高さはどこまで当か? - 分裂勘違い君劇場 に、素敵なトラックバックがあるのに気づきました。 あやしいわーるどっぽい跡地 寄せられたコメントもこれまた素敵。☆3こプレゼント。 さて題。 分裂勘違い君のいう「高度な言語機能が目的なら、かならずしもRubyである必要はない」というのは正解。いろんな言語のおいしいとこ取りするだけで比べるなら、怒涛の勢いで他の言語のおいしいところを吸収しているC#に軍配が上がると思う。非Windowsな環境でも、MonoをJVMだと考えれば、けして見劣りすることはないように思う。 でも、細かいこというと、オブジェクトの属性についての解釈はちょっとダメ。これは元記事を書いた人の言いたいことを、分裂勘違い君が誤解してる。 もと http://itpro.nikkeibp.co.jp/article/COLUMN/20060919/

    Rubyはどのへんの生産性が高いのか - なんたらノート第三期ベータ
    raimon49
    raimon49 2009/12/28
    >Rubyは関数型言語が持つラムダの美味しさを知っているにもかかわらず、Javaの延長のような、堅いOOPを選びました。細部に現れる抜群の記述性と、この手続き/関数型のバランス感覚が、Rubyのいいところだと、私は思いま
  • Pythonのselfはなぜ必要かをJavaScriptのthisで考える - なんたらノート第三期ベータ

    あなたがもしPythonを作る前のGuidoに憑依して - ネットリサーチ - livedoor ニュース が面白すぎた。2位と3位の すべてを式にする lambdaの構文を変える は、同じ願いを別の言い方でしてるような気がした。lambdaにifとforを入れたいをかなえるには、ifとforを式にするか、lambdaに文が入るようにするか、どちらか一方だし。 それはさておき、このエントリの題は、「Pythonにはselfが要る」というGuidoさんの主張について、具体例で理解することです。「こうだったらいいのにな」逆の視点、もしselfがないとどう困るのか、を考えましょう。 そこで、Pythonとは別の母親から産まれた双子、JavaScriptを例に、thisについて考えてみます。Pythonに対して、JavaScriptは「メソッド定義の第一引数に余分なアレがないこと」が特徴でしたね

    Pythonのselfはなぜ必要かをJavaScriptのthisで考える - なんたらノート第三期ベータ
    raimon49
    raimon49 2009/12/06
    >JavaScriptはself書くのが要らない代わりに、関数型な特徴を使うと、いちいちFunctionのcall(this, args...)メソッドが出てきます。本質的に要るものを1個減らすと、意図してないところにしわが1個増えるんですね。明解で端的な
  • 1