ブックマーク / bleis-tift.hatenablog.com (5)

  • Scalaのnull/Nothing/Nil/Noneはやりすぎなのか? - ぐるぐる~

    Twitterしてたら目に入ったので軽く。 Javaにおけるnull。これまでとこれから この後のスライドで、 Scalaにおける「何もないもの」の分類はやり過ぎ感はある と言われているんですが、ある程度は誤解に基づく意見だよなぁこれは、ということを言っておこうかなと。 Scalaについて 日では説明が不要なくらいScalaって有名になってると思うんですが一応。 ScalaはJVMの上で動作する、(クラス指向の)オブジェクト指向プログラミングと関数型プログラミングを融合させた言語です。 そして、Scalaのコア機能はどちらかというとオブジェクト指向プログラミング寄りです。 オブジェクト指向プログラミングをベースに、関数型の色々なものを実現している感じです*1。 オブジェクト指向プログラミング的な機能として真っ先に思いつくのは何でしょうか? 割と上位の方に、「継承」とか「型階層」とか来るん

    Scalaのnull/Nothing/Nil/Noneはやりすぎなのか? - ぐるぐる~
    t_f_m
    t_f_m 2015/04/15
  • Java 8を関数型っぽく使うためのおまじないをC#でやってみた - ぐるぐる~

    Java 8を関数型っぽく使うためのおまじない - きしだのはてな Java は大変ですね。 C# さんは、ラムダ式も Func 型(Java の Function 型に大体対応)も Visual Studio 2008 時代(5年前)から使えたので、似たようなことはすでにできます。 上記の記事のパクリなので、上記の記事をまずは読んでから読むことをおすすめします。 Func 型 C# では Func デリゲートというものがあります。名前空間名や型パラメータまで含めると、System.Func<TArg, TResult> です。 こんな感じで使います。 Func<string, string> enclose = s => "[" + s + "]"; これを呼び出そうとすると、こんな感じになります。 // Javaだとenclose.apply("foo")と、applyが必要 Syst

    Java 8を関数型っぽく使うためのおまじないをC#でやってみた - ぐるぐる~
    t_f_m
    t_f_m 2013/05/01
    "2引数以上の関数は甘え"
  • JSX の進化速度が半端ない - ぐるぐる~

    気に入らない所を直して pull request 投げたら、取り入れられたので、8 日前に書いたエントリが過去のものとなっちゃいました。 関数型 以前の JSX では、関数型は function(: int): string のように書く必要がありました。 これはこれでそのまま使えるのですが、新たに (int) -> string という形式にも対応しました。 ちなみに、複数引数はカンマ区切りで (int, boolean) -> string のようになります。 カリー化された関数は、 function(: int): function(: number): string の代わりに (int) -> (number) -> string と書けます。 引数を囲むカッコは、(今のところ) 省略不可能です。 これには 2 つの理由があります。 この機能を追加したとき、JSX のパーサの能力

    JSX の進化速度が半端ない - ぐるぐる~
    t_f_m
    t_f_m 2012/06/12
  • JSX のアレな所 - ぐるぐる~

    注意!このエントリは既に古いので、JSX の進化速度が半端ない - ぐるぐる〜もあわせて読んでください。最新のコードを参照するのが手っ取り早いです。 JSX なる言語がリリースされました。 この言語が謳っているのが、 高速 安全 簡単(生産性が高い、とも) という 3 点です。 高速と安全はまぁいいでしょう*1。 問題は、はたしてこの言語は簡単なのか?という点です。 簡単かどうかは人によるのでアレなのですが、まぁ一部の人にとっては簡単とは言えない (というか書く気がしない) 書き方を強制されるのです。 関数型 数値を受け取って文字列を返す関数を表す型は、JSX では以下のように書きます。 function(:number):string これ単体で見ると分かりやすそうな気配はします。 では、これ読めますか? function f(g: function(:number):number):

    t_f_m
    t_f_m 2012/06/04
  • rebase について - ぐるぐる~

    rebase 便利だよ、というだけのエントリです。 AA で書いてる部分は時間があれば画像に置き換えます。 rebase とは ブランチを作成した場所を変更することと理解しています。つまり、そのブランチの「親」を変更する、ということです。 もう少し動作に踏み込むと、指定したコミットの後ろに現在のブランチで行ったコミットをリプレイするように適用します*1。単なるリプレイではなく、その過程をいじくれるのが rebase のすごいところです。 単純な rebase はたとえばこんな感じです。 以下のようなリポジトリの状態があったとして (現在チェックアウトされているブランチは dev ということを表すのに * を使っています)、 1---2---3 *dev / A---B---C---D master次のコマンドを実行します。 $ git rebase masterこれにより、リポジトリの状態

    rebase について - ぐるぐる~
    t_f_m
    t_f_m 2011/11/08
  • 1