タグ

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

  • 遅延評価いうなキャンペーンとかどうか - ぐるぐる~

    遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない」です。 Java における「評価」とは まず一番最初に、Java で「評価」って言うと、どういうことを指すのかを確認しておきます。 言語仕様の該当部分を要約すると、こんな感じでしょうか。 プログラム中の式を評価すると、結果は 変数 値 無し のうちのどれかとなる。 評価した結果が値になる、というのはいいでしょう。それ以外の 2 つを軽く説明します。 評価の結果が「変数」とは? コメント欄で指摘が入っています。 代入の結果は変数ではありません(15.26)。 結果が変数となるのは、ローカル変数、現在のオブジェクトやクラスの変数、フィールド

  • Nimbusを試してみた - ぐるぐる~

    とりあえずコンポーネントをぽちぽちと配置して、mainメソッドの先頭で UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); とすればOK おぉ、かっこいい。Swing Metalとの差は歴然だな。 追記: C:\Program Files\Java\jdk1.6.0_07\demo\jfc\SwingSet2に入っているSwingSet2.jarを、 C:\Program Files\Java\jdk1.6.0_07\demo\jfc\SwingSet2>java -jar^ -Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel SwingSet2.jar としてみた。 これもなかなかいい感じ。

  • Excel-DNA を使うメリット - ぐるぐる~

    VBA を使うことに対して、Excel-DNA を使うことのメリットは大体こんな感じです。 テストが容易 コードの管理ができる 抽象度の高いコードが書ける 保守しやすい 一つずつ見ていきましょう。 テストが容易 VBA にも一応、VBAUnit などのテスティングフレームワークはあります*1。 しかし、VBA の言語自体の貧弱さもあって、あまり使いやすいものはありません。 さらに、ライブラリのような形で提供されるため、ツール連携などは絶望的です。 対して、Excel-DNA では通常の dll を作るだけですので、普通にテストを書くことができます。 先ほどの組み合わせの例にも、NaturalSpec というテスティングフレームワークを使ってテストを書いています。 コードの管理ができる VBA でも頑張ればできなくはないですが、Excel-DNA では何も頑張る必要はなく、ごく普通にコードを

  • わかめのモナ化で色々やってきた - ぐるぐる~

    わかめのモナド浸し - connpass ハンズオンの前座として、Maybe モナドと State モナドの解説をしました。 モナドハンズオン前座 from bleis tift 発表も資料も割と好評なようで、「モナドの教え方」みたいなものの感覚もつかめたので発表してよかったです。 モナド則とかそういう、ふつうのプログラマにとって難しい言葉は使ってないので、気負わずに読めると思います。 ただやはりState モナドは難しかったようで、ハンズオンでも State の追加説明をしたりと、ここら辺はまだ改善の余地ありですね。 実は書きたかったことが書ききれてはいないので、どっかで書きたかったことを追加したバージョンも作りたいところです。 参加者の反応は上々なようです。よかったよかった。 皆様大変ありがとうございました!往復二万円の価値が十分にある勉強になりました!来年またよろしくお願いします!

  • Scala で条件演算子を作ってみる - ぐるぐる~

    コップを大体読み終わったので、とりあえず Scala の環境を入れてみた。 バージョンは 2.7.7 らしい。 で、Scala で三項演算子。ここでは、他の言語でよくある条件演算子をまねて作ってみた。 条件演算子なら if 式使えよ、って話だけど、まぁ練習ということで。 まず、?: で作ろうとしたんだけど、: は Scala ではいろいろとアレなので却下。 次に考えたのが、?? の組み合わせ。でもこれも入れ子がアレなので却下*1。 で、最終的に落ち着いたのが ?! の組み合わせ。! 以降は条件が成り立たなかった場合、つまり否定された場合に選択されるし、結構いいんじゃないかな。 実装は、単純に this を返さない流れるようなインターフェイスの発想で、 class CondOpA[T](val cond: Boolean, a: => T) { def !(b: => T) = if (c

    Scala で条件演算子を作ってみる - ぐるぐる~
  • Java の語彙で Maybe を説明してみる - ぐるぐる~

    java-jaで例外処理の話をしてきました - 西尾泰和のはてなダイアリー を読んで。 Maybe は値があるかないかを型で表すことができます!そう、直和型なんです!とか言われてもイミフだと思うのです(リンク先のエントリがそう説明してるわけではないですが)。 Java の語彙で Maybe の説明をできたら嬉しい人もいるんじゃないかなぁ、とかなんとか。 ただし、書いてたら結構長くなりました。時間がある人はどうぞ。 Maybe? null より安全に「値がないこと」が扱えるものだよ スタート地点としてはこれでいいでしょう。 以降で、「なんで安全なの?」という全うな疑問に答えてみたいと思います。 問題点 int で説明すると煙に巻いてしまうような気がしたので、User クラスを見てみます。 import java.util.*; class User { final String name;

    Java の語彙で Maybe を説明してみる - ぐるぐる~
  • SQL Server で文字列を全部結合したいだけなら - ぐるぐる~

    以下のように記述すれば出来るっぽい。 DECLARE @str AS varchar(max); SET @str = ''; SELECT @str = @str + str FROM SomeTable; SELECT @str; 参考:文字列を集計的に結合する(ユーザー定義関数経由で GROUP BY 対応) カンマ区切りがしたければ、 DECLARE @str AS varchar(max); SET @str = ''; SELECT -- 先頭要素にはカンマを付けない @str = CASE @str WHEN '' THEN str ELSE @str + ', ' + str END FROM SomeTable ; SELECT @str; とか。 でも これはあくまで対象全部を結合するのであって、例えば、 n str 1 hoge 1 piyo 2 foo 2 bar

    SQL Server で文字列を全部結合したいだけなら - ぐるぐる~
    kiyo_hiko
    kiyo_hiko 2011/10/13
    *1的なことがやりたくてたどり着きましたがユーザー定義関数がなければできないらしく、無念。id:bleis-tift 再帰CTEは存じませんでした。実業務では変わったことは自重しますが調べてみます。ありがとうございます
  • プログラミングのセオリー(2) - ぐるぐる~

    プログラミングのセオリー 作者: 矢沢久雄出版社/メーカー: 技術評論社発売日: 2008/10/04メディア: 単行(ソフトカバー)購入: 1人 クリック: 138回この商品を含むブログ (42件) を見る どうしても我慢できないところとどうでもいいところをごっちゃまぜにつついてみる。 きむら(K)さんが指摘した部分とはかぶってないはず。たぶん。 以下無駄に長いので注意。 命名規約 もしも「この命名規約では嫌だ」と言う人がいたら、リーダーが説得して命名規約を守らせるようにするべきです。 「プロなのだから自分勝手はいけない。チーム内の取り決めを受け入れられる柔軟性がなければプロとして失格である。 あなたしか作れないような天才的なプログラムを作れるというなら話は別だが、そうでないならルールを守って欲しい」と言い含めて、聞き分けのないプログラマを説得してください。 こんな「説得」、いや、「押

    プログラミングのセオリー(2) - ぐるぐる~
    kiyo_hiko
    kiyo_hiko 2011/10/07
    SIerに受けそうな本。「ソースコードを短く記述できます(リスト4)」…この手のスタイルは今の会社の主流だが、読むのが苦痛。やはりガードでバンバンreturnするのは精神衛生上必要。「get・・・Average?」…最後が一番笑った
  • Java の enum - ぐるぐる~

    イマドキの Java には enum があるんですよ実は、という話。 知ってるよそんなこと!な人は読むまでもないかも。 enum って? 列挙型のこと。C とか C++ とか C# とかでおなじみのアレ。 単純な enum は Java でもこれらの言語の enum と同じような記述になるけど、これらの言語の enum が整数型をベースにしているのに対して、Java ではオブジェクトをベースにしている点が異なる。 まぁその話は後ほど・・・ 単純な enum ただ列挙するだけの enum なら、当に C や C++ や C# とほとんど変わらない。 // 信号機の色 enum SignalColor { RED, BLUE, YELLOW } ただこれだけ。末尾には、余分なカンマがあってもいい。 enum SignalColor { RED, BLUE, YELLOW, } 更に、末尾にセ

    Java の enum - ぐるぐる~
    kiyo_hiko
    kiyo_hiko 2010/09/13
    Javaのenumはかなり多機能で強力なので、immutableオブジェクトを作るのにバンバン使ってもいいのではないかと思っているが、初心者なので確信できない。
  • 1