読者です 読者をやめる 読者になる 読者になる

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>…

Scala すごい。C# は残念。

今日会社で、 using System; class Foo {} class Bar {} class Hoge { internal static Foo M(Func<int, int> f) { return null; } internal static Bar M(Func<string, string> f) { return null; } } class Piyo { internal static void A(Foo f) { Console.WriteLine("Foo"); } inte</string,></int,>…

Scala の match と XML リテラルをまねる

C#

Scala では次のようなことが可能です。 def proc(node: Node) { node match { case <hoge>{value}</hoge> => println(value) } } proc(<hoge>100</hoge>) // => 100 これを C# で真似てみました。 Scala では入れ子など色々とできるのですが、そこまでは対応できていません。 使う側は…

TestCase 属性などによるテストコードのリファクタリング

昨日のわんくまの昼休みに TDD 道場があったんですが、テストコードのリファクタリングについて賛否あったのでちょっと自分の考えをまとめておきます。 それに加え、C# と NUnit でどのようにテストコードをリファクタリングできるか、というのも紹介します…

.NET のクラスライブラリ設計

.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)作者: Krzysztof Cwalina,Bard Abrams,藤原雄介出版社/メーカー: 日経BPソフトプレス発売日: 2009/12/24メディア: 大型本購入: 9人 ク…

アサーションのメッセージ用文字列をいい感じに組み立てる

C#

アサーションに引っかかったときに出すメッセージの構築って面倒ですよね。 Java はアサーションが文法に組み込まれているくせに、アサーションの評価に使った式を表示してくれもしないという・・・ でも C# は文法にさえ組み込まれていないのでもっとアレ・…

TDD Boot Camp の参加報告とか読んで

TDD Boot Camp には行っていないんだけど、参加者のエントリを色々読んで触発されたので思っていることをちょこっと書いておきます。 日曜日は id:a-hisame に無理言って色々と聞いた*1しね! 以下引用が多くて微妙に長文。 アクセス修飾子 デモ:cobertura…

More Effective C#

More Effective C#作者: Bill Wagner,長尾高弘出版社/メーカー: 翔泳社発売日: 2009/12/01メディア: 大型本購入: 9人 クリック: 139回この商品を含むブログ (19件) を見るを読むに当たって、注意すべきかなー、と思ったところをだらだらと。 ICloneable は実…

List を文字列化

C#

List<Char>.ToString() とかC# 3.0 以降なら LINQ やら拡張メソッドやらで OK ですね。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication { class Program { static void Main(strin…

Log4Net のラッパーをつくる

C#

備忘録の意味も込めて。 やりたいことは、 Debug 系メソッドはリリースモードでは呼出しごと削除したい いちいち LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); って書くのだるいから省略したい の 2 つ。 Debug 系のメソッドをリリ…

自動プロパティに個別にアクセス修飾子を付ける

C#

自動プロパティに個別にアクセス修飾子を付けることができたことに、今日初めて気付いた。 これができると何が嬉しいかというと、例えばこんなプログラム・・・ public interface IOutputData { // Outputは外部からsetして欲しくないので // このインターフ…

NUnit 2.5 が便利すぎる

C#

NUnit 2.5 RC - ZOETROPEの日記これみてもらえればもうほとんど言うことって残ってないんですが・・・ 一応、ちょっと補足的な情報を。 TestCase 元エントリでは引数が 3 つとなってますけど、3 つ以上も可能でした。 [TestFixture] public class AttributeT…

パーシャルクラスの使い道の一例

C#

元ねた:パーシャルクラスの使い道 パーシャルクラスの使い道としては、大きめのユーティリティクラス (StringUtil とか!) のメソッドのグループごとに分割する、とかどうだろう。 StringUtil.cs public static partial class StringUtil {} StringUtil.Sub…

オブジェクト倶楽部、コーディング規約の会の「C# コーディング標準」の駄目なところ

C#

C# のコーディング規約としては、オブジェクト倶楽部のもの (PDF) が有名だけど・・・正直、これ使いたくない。 冒頭に「このドキュメントは Java コーディング標準(オブジェクト倶楽部バージョン)、VB.NET コーディング標準を C#用に変更したもの」なんて堂…

n times・・・

C#

いやまぁ遊びだけど。 ruby とかで、 3.times { puts 'Hello, world!' } ってやつ。 class Act { public delegate void ActDelegate(); ActDelegate act; public Act(ActDelegate act) { this.act = act; } public static ActDelegate operator *(Act a, int…

あずにゃん

C#

Nyan nyan = nakano as Nyan; Twitter / decimalbloat: Nyan nyan = nakano as Nyan; なんて素晴らしいコード!その発想はなかった! これなんてこのコードの足元にも及ばない>< 追記: As nyan = nakano as Sa; ・・・C# 最強じゃね?

C#・・・.NET っぽい本を積んでみた

内容はまた後で。 タイトルしかないものは「他にいい本があるか古いか興味の対象外」、それ以外はそれ以外です。 .NET 全般とかなんとか 実践!ソフトウェアアーキテクチャ ~VisualStudioとASP.NETによる業務システム開発方法~ (.NET TECHNOLOGY)作者: 尾島良…

今じゃすっかり C#er ?

C#

C++ と C# を比べて・その1 - かおるんダイアリー C++ と C# を比べて・その2 - かおるんダイアリー今じゃすっかり C#er になりつつある自分が反応しますよ、っと。 C# では型変換がめんどう? X( C# で byte 列とか弄ったことないのでパス>< C# は型の制…

Dictionary リテラルの夢は儚く散った・・・訂正。散ってはいなかった

C#

using System; using System.Collections.Generic; namespace Dict { class Dict { public delegate void KeyValue<K, V>(out K key, out V value); public static Dictionary<K, V> Create<K, V>(params KeyValue<K, V>[] kvs) { var result = new Dictionary<K, V>(); foreach (var kv in</k,></k,></k,></k,></k,>…

流れるようなインターフェイス書いてて思ったこと

流れるようなインターフェイス書いてて、「これメソッドのグルーピングに使えるんじゃね?」って思った。 例えば Visual Studio でも Eclipse でも、補完機能って平坦なリストなんだよね。 オーバーロードは一つにまとめてくれるけど、似たような名前のメソ…

流れるようなインターフェイス

C#

なんか単に this を返せばいいって思っている人も多いようけど、ただ this を返せばそれが使いやすいかって言われると、正直微妙。 例えば、 public static class StringUtil { public static SubstrInfo Substr(this string str) { return new SubstrInfo(s…