C#の書き方 基本編

概要

この資料はC#をとにかく急いで、詳しいことは無視して書くことを目的としています。 難しい話は出来るだけ廃して、オブジェクト指向やクラスといった解説もせずに、動くものを作る事を目的としています。 C#という言語を選んだのは、第一に筆者がよくなじんでいるからですが、なにより入力補助が強力で、触りながら学べる言語だからです。 きちんと勉強したい人は世の中たくさん入門サイトがありますからそちらでお勉強をしてください。

はじめよう

とにかく手軽に書いてみるにはgrasshopperがおすすめだ。 Rhinocerosを開き、grasshopperと入力。そこで適当な場所をダブルクリックしてC#と入力しよう。

C# Scriptを選択する(エンター)と、C#コンポーネントが現れる。それをダブルクリックする。 そこで以下のように上の白い部分に「A = "Hello, world!";」と入力する。セミコロンを忘れないこと。

AにPanelを接続すればきちんと出力されていることがわかるだろう。

次は少し難しく、「A=new Rhino.Geometry.Circle(5);」と入力する。そうすれば円が作成される。 これを入力する過程で下のような候補一覧が表示された事に気づいただろう。これがC#のようなオブジェクト指向言語を使う最も実用的な理由といってもよい。

C#を含めたオブジェクト指向言語は以下のような特徴を持っている。(詳しくは自分で調べてください)

  1. 型(intとかfloatみたいなもの、クラスと呼ぶ)がたくさんあって自分で定義できる。
  2. 変数には代入や四則演算に限らずさまざまな操作ができ、また内部に変数を持っていることもある。
  3. 型や命令は階層化されている(名前空間)。

数や文字等ではない型の値を作る際に使うのがnewキーワードだ。 「A=new Rhino.Geometry.Circle(5);」というのは「Rhino/Geometryという階層にあるCircleという型に5という数字を与えて値をつくり、それを変数Aに代入してください」ということを意味する。

ついでにusingというのは言ってみればコマンドプロンプトのカレントディレクトリみたいなものでこの階層にある型や命令はいちいち階層を指定しなくても判断してください、という意味になる。ただしC#では複数持てる点には注意が必要。

実はgrasshopperのC#では標準で”using Rhino.Geometry;”と書かれている。だから、「A=new Rhino.Geometry.Circle(5);」は「A=new Circle(5);」とかいても全くかまわない。

変数を操作する

さきほど述べたようにC#では変数にいろいろな操作を行うことが出来る。では以下のように書き換えてみよう。

    Circle c = new Circle(5);
    c.Translate(new Vector3d(3, 0, 0));
    A = c;

一行目から解説するとこういうことになる。

  1. 半径5のCircleを作ってCircle型の変数cに代入する。
  2. Vector3d型(3,0,0)ぶん変数cを移動させる。
  3. 変数Aの中身をcにする。

結果としてAには中心座標(3,0,0)、半径5の円が出力される。

ちなみに、一行目はvar c = new Circle(5);と書き換えられる。Circle型の値が入る変数はCircle型に決まっているのでvarで省略できるからだ。型が長い名前の時などには便利だが、一意に決まらない場合には機能しない。

ついで、最後の行のc;をc.Center;としよう。 そうするとAは変わりにcの中心座標(3,0,0)になったと思う。 これは、円という型は中心座標と半径という値を持っているという考え方に基づく。 実際には値を持っていなくて、聞かれたときにその場で計算するという挙動をすることもあるのだが概観上は分からないはずだ。このおかげで一つの値を書き換えたら他の値が整合性を持って変化するということも起こる。

関数を作る

きちんとしたプログラムを書くにはforとかwhileとかifとかが必要だ。

    for(int i = 0;i < 10;i++){}

とか、

    bool state = false;
    while(state){}

とか、

    int a = 1;
    if(a == 0){
    }else if(a == 1){
    }else{
    }

といった感じだ。これはどのプログラミング言語もほぼ同じだしどこかで学べるで解説しない。 関数の定義だけ独特だ。 ただしGrasshopperで使うだけなら話は簡単で、<Custom additional code>の間に、

public static 戻り値の型 関数名(引数の型 引数){
  プログラム
}

とだけ書けばいい。詳しくは後ほど解説する。

配列・辞書

他のプログラミング言語を既に学んだ人の中には配列には苦労させられた人が多くいると思います。 C#での配列の使い方は基本的にはC言語等と同じです。

  int a[]={1,4,5};

ただしC#にはそれに加えて便利な機能があります。