タグ

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

  • Go言語のイケてない部分 - ぐるぐる~

    最近色々あって仕事Go言語を使っています。 色々割り切っている言語なので、こんなこと言ってもしゃーないんですが、言語設計はミスってるんじゃなかなぁ、と思わざるを得ない点が多々あります。 使い始めて1か月くらいなので間違ったことを書いているかもしれませんので、何かあれば指摘していただけるとありがたいです。 文ではネガばかり羅列していますが、ランタイムとツール周りは気に入っています。 Goのランタイムを使う、もっと洗練されたAlt Go的なものがあるといいのに(もしくはジェネリクスのったGo2を早くリリースしてほしい)、と思う日々です。 追記: なんか意図とは違った受け取られ方をしている方もいるので追記します。 この記事はあくまで、「Go言語を学ぶにあたって躓いた点」を列挙し、まとめ、理由を考えてみる(教えてもらう)ために書いたものです。 Go言語自体はDisってますが、Go言語ユーザーを

    Go言語のイケてない部分 - ぐるぐる~
  • シャドーイングとイミュータブルプログラミング - ぐるぐる~

    シャドーイングのない言語と、イミュータブル中心のプログラミング(以下イミュータブルプログラミング)の相性って悪いのでは?と思ったのでブログに残しておきます。 シャドーイングとは 既存の変数と同名の変数を定義して、そのスコープで既存の変数にアクセスできなくする機能です。 例えば、F#ではシャドーイングができるので、 let f x = if x % 2 = 0 then (* 引数のxをシャドーイング *) let x = -1 printf "%d, " x (* スコープが抜けたので、引数のxを表示 *) printfn "%d" x f 10 (* => -1, 10 *) f 11 (* => 11 *) となります。 シャドーイングのない言語、例えばC#では同じことはできないので、別の名前を付けるか、再代入で回避することになります*1。 public void F(int x) {

    シャドーイングとイミュータブルプログラミング - ぐるぐる~
    teracy_junk
    teracy_junk 2018/11/09
    プログラミング用語としての「シャドーイング」が見慣れない言葉だったが、なるほどそういうものなのね
  • C#に型クラスを入れる実装の話 - ぐるぐる~

    この記事はC# Advent Calendar 2016の12日目のものです。 昨日(今日)書いた、F# Advent Calendar 2016 11目のC#版です。 今日のリポジトリはこちら。 github.com 実は、F#版だけじゃなくてC#版の実装もあります。 ということで、そのざっくりした紹介です。 型クラス?コンセプト? F#版では「型クラス(type class)」と呼んでいますが、C#版では「コンセプト(concept)」と呼んでいるようです。 で、コンセプトがあると何がうれしいかですが、例えばC#には現在3つの2要素タプルがあります。 System.Collections.KeyValuePair<TKey, TValue> System.Tuple<T1, T2> (T1, T2) これらの型すべてに対応するためには、現在のC#ではオーバーロードを3つ書く必要がありま

    C#に型クラスを入れる実装の話 - ぐるぐる~
  • 値渡しと参照渡し (と参照の値渡し) - ぐるぐる~

    値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡しの違いは、「呼出し元の値自体を変更できるかどうか」と説明されることが多い。 しかし、例えば Java ではミュータブルなオブジェクト *1 を渡した場合、呼出し元の値自体を変更できるという勘違いをする可能性があるため、この説明はあまり好ましくない。 そのため、参照渡しを「呼出し元の別名を渡している」と覚えるのが分かりやすいと思う。 値渡しは「何かの値をコピーして渡している」と覚える*2。 Java の場合 Java には値渡ししか存在しないが、「参照型」のためにややこしく感じる。 参照型は参照渡しとは無関係で、C

    値渡しと参照渡し (と参照の値渡し) - ぐるぐる~
  • なごやかJava ゆるふわテストツール編で発表してきた - ぐるぐる~

    テストの自動化を考える前に from bleis tift 発表してきました。 テストツール編なのに、Javaにもテストツールにも関係のない、テスト自体の話です。 それなりに反応は良かったかな? 資料作ってる時に、盛り込み過ぎだったので資料から抜いたものを独立して別の資料にしたので、時間があったらそっちも発表しようかなー、と思っていたんですが、なかったので公開だけしておきます。 効果の低いテストの話 from bleis tift 異論は認める。

    なごやかJava ゆるふわテストツール編で発表してきた - ぐるぐる~
  • オブジェクト倶楽部、コーディング規約の会の「C# コーディング標準」の駄目なところ - ぐるぐる~

    C# のコーディング規約としては、オブジェクト倶楽部のもの (PDF) が有名だけど・・・正直、これ使いたくない。 冒頭に「このドキュメントは Java コーディング標準(オブジェクト倶楽部バージョン)、VB.NET コーディング標準を C#用に変更したもの」なんて堂々と書いてる時点で・・・ で、この規約のどこが駄目なのか、なぜ駄目なのか、どうすればいいのかをまとめてみた。 なんだかんだで長文エントリ。 追記: ちなみに、C# の規約としてはクラス ライブラリ開発者向けのデザイン ガイドラインで十分だと思う。 更に追記: ブコメで教えてもらったんだけど、どうやらクラス ライブラリ開発のデザイン ガイドラインの方が新しいらしい。 2. ファイル構成 (1) ファイル名 public クラスはそのクラス名の 1 ファイルにする。 例:public class Customer は、Custom

    オブジェクト倶楽部、コーディング規約の会の「C# コーディング標準」の駄目なところ - ぐるぐる~
  • そろそろPower Assertについてひとこと言っておくか - ぐるぐる~

    タイトルはもちろん釣りで・・・はない! ちょっと真面目に、Power Assertについて意見を述べたいのです。 そもそもPower Assertって何? てきとーに説明すると、 普通の比較演算子で普通にassert書けば、失敗時に各部分式の値を表示してくれる ようなものです。 Groovy製のテスティングフレームワークであるSpockがおそらく家大です((要出典。こういう系の発想は割と昔からあったし、Spock以前に実装例がありそうな気がする。そもそも、Spockは最初からPower Assert持ってたのかも調べないといけない。ちなみに、式木を弄ってAssertを組み立てる、というものであれば(PowerAssertよりも情報量は少なくなるものだけど)、自分の知る限りだと2009年6月にこんな記事があります。 http://themechanicalbride.blogspot.j

    そろそろPower Assertについてひとこと言っておくか - ぐるぐる~
  • C# 使いから見てうらやましい Java8 の default 実装の使い方 - ぐるぐる~

    Java8 から追加されるインターフェイスの default 実装ですが、C# の拡張メソッドに似てますよね。 実際、このどちらも「シンインターフェイス」を定義するだけで「リッチインターフェイス」が手に入ります。 しかし、C# の拡張メソッドと Java のインターフェイスの default 実装には、それぞれの利点と欠点があります。 拡張メソッドの利点 拡張メソッドの利点は、インターフェイスの実装者だけでなく、 インターフェイスの使用者に対してもインターフェイスの拡張が開かれている点です。 既存の型ですら、後付けでメソッドを追加することができるということです。 using System; public static class StringExtension { // インターフェイスでなくても、どんな型に対しても拡張可能 public static int ToInt(this str

    C# 使いから見てうらやましい Java8 の default 実装の使い方 - ぐるぐる~
  • 遅延評価いうなキャンペーンとかどうか - ぐるぐる~

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

  • SCM Boot Camp 2 in Tokyo に行ってきた - ぐるぐる~

    今回は Git の講師として参加しました。 2 回目と言うこともあって、よりスムーズに進めることができたように思います。 個人的なもくろみ 今回参加して、SCM Boot Camp の DVCS イベントの部分はある程度パッケージ化したいと考えるようになりました。 まだ 2 回しかやっていませんが、DVCS (少なくとも Git) の効率的な習得のためのスキームというのが見えてきた感じです。 最終的には、講師が 1 人いれば小規模なイベントを開くことのできるところまで落とし込めるのでは、と考えています。 以下時系列順の雑多な感想や補足など 開催前 今回は、開催の準備として数回 Lingr によるミーティングを行いました。 資料の作成も段階的に行うことができたのでフィードバックを取り入れることができてとてもよかったです。 にも関わらず、 30秒前までずっと作り続けていたらしいので、たぶんあり

    teracy_junk
    teracy_junk 2011/11/21
    『TortoiseSVN ユーザのための Git Bash 入門の必要性』きになるー
  • match があれば TryParse いらないんじゃないか - ぐるぐる~

    Scala の match を真似て C# で色々書いているわけですが、なんかもう TryParse は Obsolete でいいんじゃ、と思えてきました。 例えばですよ、 public static T MatchInt<T>(this string self, Func<int, T> ifMatch, Func<T> ifNotMatch) { int result; return int.TryParse(self, out result) ? ifMatch(result) : ifNotMatch(); } public static T MatchInt<T>(this string self, Func<int, T> ifMatch) { return MatchInt<T>(self, ifMatch, () => default(T)); } こんな拡張メソッドを用意

    match があれば TryParse いらないんじゃないか - ぐるぐる~
  • 1