C#

C#に型クラスを入れる実装の話

C#

この記事はC# Advent Calendar 2016の12日目のものです。 昨日(今日)書いた、F# Advent Calendar 2016 11目のC#版です。 今日のリポジトリはこちら。 github.com 実は、F#版だけじゃなくてC#版の実装もあります。 ということで、そのざっくりした紹介です。 …

re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。

元ネタ: 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記 OOPの文脈で見ると、元の記事が言っていることもわからなくはないのですが、対象が広すぎていろいろと不正確になってしまっているので、ちょっと…

ChalkTalk CLR – 動的コード生成技術(式木・IL等)に行ってきた

centerclr.doorkeeper.jp 直前で定員を増やしてもらえたので、参加できました。 会自体について 内容は主にILの話と式木の話で、ディスカッションというよりは講義に近い感じでした。 個人的にはディスカッション寄りの会を期待していたのですが、知識レベル…

シャドーイングとイミュータブルプログラミング

C# F#

シャドーイングのない言語と、イミュータブル中心のプログラミング(以下イミュータブルプログラミング)の相性って悪いのでは?と思ったのでブログに残しておきます。 シャドーイングとは 既存の変数と同名の変数を定義して、そのスコープで既存の変数にアク…

なごやかJavaで発表してきた

.NET系開発者から見たJava from bleis tift なごやかJava第一回で、「.NET系開発者から見たJava」というタイトルで発表してきました。 Javaのこの機能って.NET開発者から見てどうなの?というような内容です。 大阪から参加してくれた方の感想を載せておきま…

JavaでTupleってみる

可変長な型変数の表現より、タプルの話です。 .NETのタプル .NETでは、型引数の数が違うクラスを定義できるので、Tupleという名前で7要素まで対応しています。 public class Tuple<T1> { ... } public class Tuple<T1, T2> { ... } public class Tuple<T1, T2, T3> { ... } public cl</t1,></t1,></t1>…

オーバーロードって素晴らしいですよね!

C# F#

オーバーロード いやぁ、オーバーロードって素晴らしいものですよね。 例えばC#でintを取るメソッドと、stringを取る同じ名前のメソッドを書きたくなったとするじゃないですか。 そんな時でも、C#はメソッドのオーバーロードが出来るので、こう書けるわけで…

NullableとOptionの違い

C#

このエントリの最新版はGithubにあります。 Optionそのものについてのエントリは書く必要ない(世の中に有用なドキュメントが山ほどあるから)かな、 と思っていたのですが、Nullableとの違いについてはそれなりに需要がありそうなので書いておきます。 ちなみ…

LangExtでのOptionの設計

C#

このエントリの最新版はGithubにあります。 Optionの意味を理解していることを前提に、直和型をC#で実現する方法についてを説明し、 LangExtではどういう方針を採用しているのかと、その理由について明らかにします。 バリアント型のC#での設計方針 Optionな…

C# 使いから見てうらやましい Java8 の default 実装の使い方

Java8 から追加されるインターフェイスの default 実装ですが、C# の拡張メソッドに似てますよね。 実際、このどちらも「シンインターフェイス」を定義するだけで「リッチインターフェイス」が手に入ります。 しかし、C# の拡張メソッドと Java のインターフ…

LangExt2.0 リリースしました

C#

しました。 パッケージ: NuGet Gallery | LangExt 2.0.0.0 コード: LangExt/LangExt · GitHub メジャーバージョンが上がって、1.xとは互換性のないものになっています。 そこらへんについては、「なぜそうしたのか」等をまとめて公開していくつもりです。 で…

Java 8を関数型っぽく使うためのおまじないをC#でやってみた

C#

Java 8を関数型っぽく使うためのおまじない - きしだのはてな Java は大変ですね。 C# さんは、ラムダ式も Func 型(Java の Function 型に大体対応)も Visual Studio 2008 時代(5年前)から使えたので、似たようなことはすでにできます。 上記の記事のパクリ…

並列/並行基礎勉強会でasync/awaitをDisってきた

C# F#

async/await不要論 from bleis tift 3/23 に開催された、並列/並行基礎勉強会で「async/await 不要論」という発表をしてきました。 一番言いたかったこと 一番言いたかったことは、実は並列とかとは全く関係ないことです。 それは、言語への機能追加に関する…

第2回 関数型言語勉強会 大阪でしゃべってきてた

F# C#

第2回 関数型言語勉強会 大阪 : ATNDもう一か月以上前じゃないですか・・・ ということで、しゃべってきました。 Better C#の脱却を目指して from bleis tift C# (や Java) を使っているときよりも型の力を借りましょう、ということを主軸に話しました。 C# …

C# から使いやすい F# コードの書き方

F# C#

さて始まりました、F# Advent Calendar 2012 です。 今年は、「実用」がテーマと言うことで、F# で書いたコードを C# から使いたくなった時に気を付けるべきポイントなどをまとめました。 F# と C# で異なる名前を付ける F# では、module に定義する関数や変…

null の扱い

Maybe つながりで、色んな言語の null の扱いについてちょっとだけまとめてみた。 観点は一つ、「this が null の場合に this の指す先にアクセスしないメソッドが呼び出せるか」です。 C++ #include <iostream> struct hoge { void f() { if (this == 0) std::cout <<</iostream>…

Quick Test Switcher 1.1 をリリースした

テストコードと実装コードの切り替えを支援する Visual Studio 用のアドインを作りました。 マニュアル的なもの Visual Studio Gallery のページ ソースコード コードを開いた状態で Ctrl-0 を押すと、対応するファイルがある場合にそれを開きます。 頻繁に…

再帰で考える

F# C#

再帰は関数型言語を構成する重要な部品の一つです*1。 しかし、手続型言語に慣れたプログラマにとって、再帰で考えるというのは難しいものがあります。 このエントリは、そういうプログラマが再帰で考えることができるようになるために書きました。 言語とし…

演算子のオーバーロードを乱用してみた

C#

C# は演算子のオーバーロードの規則が厳しくてつらいことがあるんですけど、回避できるかも! ・・・と思いついて、やってみたら出来なかった、という話です。 やりたいことは関数合成です。 F# の関数合成みたいに、>> とか C# で > は右項が int に限定さ…

Excel-DNA のセルに対する書き込み性能を計ってみた

ExcelDnaUtil.Application を F# から使ったらえらい遅かったので、色々試してみました。 結論を書くと、キャッシュしてなかったから遅かっただけでした。 ベンチマーク概要 100 * 100 のすべてのセルに 1 を設定していく時間を計測しました。 セルに対する…

TDD Boot Camp のお題を C# と Git でやってみた

自分で考えたお題を自分で解くとかそれなんてマッチポンプ・・・ 打ち上げ終了後のホテルと、翌日の帰りの新幹線の中で書いたコードを順番に追ってみます。 準備するものは Git で、あるといいものは Visual Studio 2010 と NUnit です。 まぁ、割と小さいコ…

TDD Boot Camp 福岡 2.5 日目 〜 3 日目?

後日譚てきな。 終電とか考えずに打ち上げに参加したので、もう一泊していくことになりました。 こんなこともあろうかと 3 泊分の用意をしてきたのでした。 で、ホテルを探すんだけどどこも満室・・・ みずぴーさん (id:mzp) だったか末次さん (id:suer) だ…

よくあるコーディングパターンと LINQ to Objects の対応付け

C#

あると便利ですよね、ということで書いてみた。 よくあるコーディングパターンには yield とか使ってないです。 こっちの方がよくありそうでしょ? Select 全ての要素に何らかの処理を行いたいときに使用します。 // よくあるコーディングパターンその1 // …

SelectMany があればいいんじゃないだろうか?

C#

2次元配列を扱うのに、もう2重ループは必要ありませんね。 SelectManyと2次元配列の素敵な関係:Gushwell's C# Dev Notes というのを読んで、むしろ LINQ っぽく扱えた方がうれしいんじゃないかな、と言うことで書いてみた。 static class Program { static I…

verbatim identifier でキーワードを識別子に使う方法

C#

このエントリは C# Advent Calendar jp: 2010 の 8 日目のものです。 C# 内で C# のキーワードを識別子として使いたい場合、verbatim identifier を使います。 verbatim identifier は、識別子もしくはキーワードの先頭に @ を付けたものです。 例えば、 // …

バインド

C#

撃ち終わると、バインドってのも解けちゃうんだね。 C# でバインドするアレなコードを書いてみました。やっぱり T4 Template の力を借りてます。でも T4 Template ももうだめですね。n = 10 とかにするとひどいことに・・・あ、やめたほうがいいですよ。メモ…

Hudson の NUnit Plugin を使うとテストケースの数が減る問題とその解決方法

仕事で Hudson を使い始めた頃 (去年の 10 月だか 11 月だか) から、NUnit のテストケースが実際よりも少なくなってしまう問題は認識していましたが、あまり気にしていませんでした。 しかし今回、かなりの数のテストケースが削られていたため、ちょっと調べ…

タプルを分解して渡す

Scala ではタプルをパターンマッチで分解してくれるので、タプルが非常に使いやすいです。 しかし、C# にはパターンマッチがないので、いちいち Item1 やら _1 やらでアクセスする必要があります。 例えば、 var strs = new[] { "aaa", "bbb", "ccc" }; var …

TypeMatch (邪悪です)

先週末の名古屋 Scala 勉強会用に、こんなコードを書きました。 2 行目からの ObjectExtension クラスで、object に対して拡張メソッドを追加しています*1。 このときは Cast という名前にしましたが、これは TypeMatch という名前にして、 e.TypeMatch( (Va…

match があれば TryParse いらないんじゃないか

C#

Scala の match を真似て C# で色々書いているわけですが、なんかもう TryParse は Obsolete でいいんじゃ、と思えてきました。 例えばですよ、 public static T MatchInt<T>(this string self, Func<int, T> ifMatch, Func<T> ifNotMatch) { int result; return int.TryPa</t></int,></t>…