docker使ってC#書いてみた
はじめに
このアドベントカレンダーの19日目の記事です
前回はかがりさんだったのですが、ちゃんと読んだ本をアウトプットしててすごいなと思いました
今回は最近やったこととして、dockerでサクっとC#を書いたという話です
dockerということなので今回はMonoを使用してみました
docker
$ docker run -it mono /bash/bin
$ apt update
$ apt install vim
Mono公式がDockerイメージを配布するのでありえん楽ですね
とりあえずこれでコンテナ内でC#のコンパイルと実行ができます
本当は外部ファイルをコンパイルと実行をできるようにしたかったけどよくわからなかったのでやめました
わかる方は教えてください
C
とりあえず車輪の再発明ですがかんたんにスタックを実装
using System.Collections.Generic; using System; namespace Info.Whiled { class StuckTest{ public static void Main(){ Stuck<string> stuck = new Stuck<string>(); stuck.Push("vim"); stuck.Push("c#"); Console.WriteLine(stuck.Pop()); Console.WriteLine(stuck.Pop()); } } class Stuck<Type> { private List<Type> list = new List<Type>(); public void Push(Type data) { list.Add(data); } public Type Pop() { Type data = list[list.Count-1]; list.RemoveAt(list.Count-1); return data; } } }
コンパイルして実行
$ mcs Stuck.cs $ mono Stuck.exe > c# > vim
本当にC#がコンパイルして実行できた、とか言ってた気がします
次にエラトステネスのふるいを実装
こちらはとりあえず言語触るたびに書いてたのですんなり
特有の構文もいりませんし
using System; namespace Info.Whiled { class Era { public static void Main(string[] args){ bool[] bools = new bool[101]; for(var i=2; i<bools.Length; i++) bools[i] = true; for(var i=2; i<bools.Length; i++){ if(bools[i]) for(var j=i*2; j<bools.Length; j+=i) bools[j] = false; } for(var i=2; i<bools.Length; i++){ if(bools[i]) Console.WriteLine(i); } } } }
$ mcs Era.cs $ mono Era.exe 2 3 5 7 11 ...
めっちゃ楽
感想
C#、なかなか書きやすいのではないかと感じた
dockerめっちゃ便利
あと僕に知識がなくそのままコンテナ内でvim使って書いてたのでシンタクッスハイライトとかなにもなしで書いてたのでつらかった
最後に一つ、Windowsがある場合は普通にWindowsで書けばいいなと思いました
内容全然なかったですが、これで終わりです。明日の記事はぬまたさんで「2017年おもしろかったYouTubeの動画を紹介します。」だそうです。きっと面白い記事を書いてくれるでしょう。