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

集中力なら売り切れたよ

プログラミングや、将棋などについて書きます。

RubyとC#のLINQとの比較、3の倍数を抜き出すプログラム

3の倍数と3のつく数字のときオモロー!というプログラム(FizzBuzz問題系)

Rubyで書くと非常に楽です(自分が慣れているからでもありますが)。

# coding: cp932
result = (1..40).select do |i|
  i % 3 == 0 || i.to_s.include?("3")
end
for i in result
  puts "#{i}:オモロー!"
end

C#LINQやクエリ構文の使い方を調べて書くと似たような書き方ができました。データ型はvarで宣言しても問題なくコンパイルできるんですが、まだC#に慣れてないのでちゃんと型宣言しようと思います。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main(string[] args)
    {
        IEnumerable<int> result = Enumerable.Range(1, 40)
            .Where(n => n % 3 == 0 || n.ToString().Contains("3"));
        foreach (int i in result) {
            Console.WriteLine("{0}:オモロー!", i);
        }
    }
}

実行結果

3:オモロー!
6:オモロー!
9:オモロー!
12:オモロー!
13:オモロー!
15:オモロー!
(以下略)

C#やPowerShellでOSのバージョンを確認する方法

C#ではSystem.Environment.OSVersionで取得できます。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Environment.OSVersion);
        }
    }
}

PowerShellでも同様です。

PS C:\Users\Ryo> Write-Host ([System.Environment]::OSVersion)
Microsoft Windows NT 10.0.14393.0

Rubyでnilだったら代入するイディオム

他の言語ではあまり見かけませんが、左辺がnilだったら代入し、nilでなければ代入しない式として以下のものがよく使われているようです。

a ||= "abc"
# つまりこういうこと?
a = a || "abc"
# ifを使うならこうなる?
a = "abc" if a.nil?

個人的には暗号めいたように感じたのですが、そのうち慣れるのでしょうかね。

Rubyで開発するときは冗長モードを有効にするほうがよい

コマンドラインでの実行時に-wオプションをつけるとコンパイル時、実行時の警告を出してくれる。具体的には使っていないローカル変数などがあれば警告してくれる。デフォルトでは警告は出ない。いちいち指定するのが面倒な場合はRUBYOPT環境変数に-wをセットすると良い。

def main()
  a = 1 # 使っていない変数
  b = 2
  c = 3
  puts b + c
end

if __FILE__ == $PROGRAM_NAME
  main()
end

> ruby -w main.rb
main.rb:2: warning: assigned but unused variable - a
5

参考書籍

Effective Ruby

Effective Ruby

Windows 10で環境変数のPATHを設定する方法

Windowsキー+X」でメニューを呼び出し、「システム」を選択します。

「システムの詳細設定」を選択します。

環境変数」を選択します。

「PATH」という項目を編集します。