C# 始めました
書いたことはありましたが、それもほとんど何となくサンプルうつすぐらいの程度。諸般の事情から特定用途向き C# を始めることになりました。
C++ より気が利いていて、Java より楽に書ける。特定用途に C++ を使い続けるのは、それが一番詳しいからなだけであって、効率が決していいとはいえないことを考えると C# が一番いい気がしました。
とりあえず準備。Meadow + Poderosa 環境。コンパイルは Meadow 上でやります。
オリジナルの TZTTester は C++ 用テストコードを吐くので、C# コードを吐く Petr 版を使います。それから、C# 用の .emacs。コンパイラの csc は C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 にあるのでパスを通す。今のところパスを通しただけで使えた。
(autoload 'csharp-mode "csharp-mode" "Major mode for editing C# code." t) (setq auto-mode-alist (cons '( "\\.cs\\'" . csharp-mode ) auto-mode-alist )) (defun csharp-compile-current-buffer () (interactive) (compile (concat "csc /w:4 /o /out:a.exe " (buffer-file-name (current-buffer)))) ) (defun csharp-compile-current-buffer-no-wall () (interactive) (compile (concat "csc /o /out:a.exe " (buffer-file-name (current-buffer)))) ) (defun run-test () (interactive) (shell-command "./a") ) (add-hook 'csharp-mode-hook (lambda () (local-set-key [?\C-c?\C-m] 'csharp-compile-current-buffer) (local-set-key [?\C-c?\C-j] 'csharp-compile-current-buffer-no-wall) (local-set-key [?\C-c?\C-n] 'next-error) (local-set-key [?\C-c?\C-t] 'run-test) ))
適当に SRM とといてみて具合を確認。ちょっとやって気づいたこと。
- Tuple がないどころか、Pair がない
- 配列や List が等値演算子で自然に比較できない
これ結構痛いなぁ。自分の場合、適当に再帰 → memo ということをよくするので、このとき複数引数のときは自然とタプルを使いたくなる。Pair クラスなり作っておいて適当にはっつけるかな。最近思ったのだが、こういうときに Pair みたいなのを入れこさせるなら、配列にしてしまった方が楽な気がする。
それから、generics なメソッドを使うとき、f