C#簡易入門5

C#簡易入門4のつづきです。クラスやフィールドなどについてのメモ的なものです。
Unityで簡単なスクリプトを作る為の準備運動程度です。プラグインの中身を理解できたら尚良しとする。

C#簡易入門5 はじめに

※データという物として存在しないものを説明しなけらばならず、人によって変化する抽象的な表現となってしまう。各自これならわかるという表現を検索してほしい。 
ここまではとにかくクラスとメソッドについて理解してほしい。
クラスがわからなければ、フィールドもわからず、メソッドもわからない。
項目リンクを設けてはいるが、前項を理解しないと次項目も理解し難い。一個ずつ理解してもらうように該当項目では他の説明は後述としてます。
引数、戻り値を理解するにはメソッドが要であり、厄介なので、くどいですが何度も説明しています。
最終的に処理の流れがわかれば良いとする。
次のページから実際にUnityでスクリプトを作る。>>Unity5でスクリプト実践

C#簡易入門5 項目

プラグイン オリジナル タグをつくろう 公式 http://jokerscript.jp/adv/next/plugin
<<C#簡易入門4に戻る
  1. フィールドの使い方
  2. インスタンスのおさらい
  3. メソッドのおさらい
  4. フィールドの無い、メソッドのみの場合
  5. メソッド まとめ
  6. メソッドとインスタンスの書き方
  7. インスタンスの生成
  8. インスタンスに内容を与える
  9. 引数と戻り値

<<C#簡易入門4に戻る
>>C#簡易入門6をみる 補足
>>Unity5でスクリプト実践
メニューに戻る

フィールドの使い方

単純にフィールド(情報)をもったクラス例


  class 店員
  {
    ・店員名
    ・労働時間数
    
  }



class Tenin{

public string tenin_name;
public int wk_time;



■おさらい
クラスを定義するにはclassというキーワードにつづきクラス名を書く。{}の内部にはクラスの内容を書く。
内容に書かれた単一な情報をフィールドと呼ぶ。

  • 内容について詳しく
■string テキスト型の値である。
C#簡易入門 例 店員の名前
■int 整数、数の値である。
C#簡易入門 例 労働時間数
■public
publicをつけるとプログラム内外どこでも呼び出し可能とする
本来はどこでも呼び出して変更できてしまったら困ることが多いが、制限についてはまだ知らないので制限無しとする。
classの前につけることもあり。


インスタンス おさらい

■おさらい
クラスはただの型、マニュアルなので、インスタンス化(実体化)されないと実行できないし、クラスの中に書かれた変数も実体化されない。実体化さえすれば、何個でも量産できる。
前項で例えると、class Teninで行われた変数宣言で、実際の変数は作成されない。なぜならクラスとは設計図なので、これは「変数を作りなさい」という指示を書き込んだと見なされるのであって、変数そのものを作れという指示ではないのである。この変数が本当に作成されるのは、クラスのインスタンスが作られたときである。
逆にいえば、ここではtenin_name;やwk_time;という変数は1個しか宣言していない。インスタンスは何個でも作ることができるので、
変数tenin_name;やwk_time;が何個も実際に作られる場合もある。

クラス名 変数名=New クラス名();

例 Tenin taro =New Tenin();
中身はないが実体化のみされる。


メソッドのおさらい

インスタンスの使い方を書く前にメソッドの書き方を知らなければならないし、クラスについて強固な理解が必要である。


 
namespace 焼肉店
{
  class 店員 Tenin
  {
    ・雇用形態 public string tenin_name;
    ・労働時間数 public int wk_time;
    ・挨拶する【就業ルールrule】(){ 「いらっしゃいませ」と言う。 }
  }
};

  • 挨拶する【就業ルールrule】(){ 「いらっしゃいませ」と言う。 } の部分がメソッドである。

  • プログラムは、様々な係(クラス)を配置し、分担させて作っていきます。クラスが担当する仕事のことを、「メソッド」と言います。 単一な情報保管のフィールドとは全く違って、機能面(関数)の役割

■public
どこからでも参照できるもの 通常はどこからでも参照できたら困る事が多いのですが今はこうしておきます。
publicは、アクセス修飾子といい、外部クラスからもメソッドを呼び出すことができることを意味します
■string テキスト型
C#簡易入門
■int 整数型
C#簡易入門

フィールドの無い、メソッドのみの場合


 
public class Hello{
   /***メソッド****/
    public static void Main(){
                
        System.Console.WriteLine("Hello C#");
    }
/*********/
}

■public static void メソッド名()
アクセス修飾子 戻り値の型 メソッド名()
メソッドとして書く場合、メソッド名の前にアクセス修飾子(例public)と戻り値の型(例としてstatic void(戻り値の型)をつける。
戻り値については、後で説明しますが、「void」は、返すデータ型の種類のひとつです。
メソッド呼び出し元へ何らかの値を返す必要がある場合に、返すデータ型を指定する。
作業の結果もらえるものを「戻り値(もどりち)」と言います。「返り値(かえりち)」と呼ぶ人もいます。

ひとまず、書き方だけ覚えましょう。
戻り値の型は、「void メソッド名」か、「public static void メソッド名」 などのどちらかで使われる事が多い。
classでは無いので当然classはつかない

※2
■戻り値 なんらかの結果を得るメソッドではどんなタイプの値を得られるのか指定します。
戻り値の使い方についてはまた後で詳しく説明します。そんなものが、あることを覚えてください
■void
戻りの型としてvoidを使うとするなら 何の値も得ないときに使用します。詳しい意味は後述します
※2 戻り値の使い方についてはまた詳しく説明します。

http://wisdom.sakura.ne.jp/programming/cs/cs2.html

メソッドの書き方 まとめ

関数(メソッド)は処理をひとまとめにすることができ、その処理を渡される値と処理が結果として返す値を制限をします。これはプログラミングの複雑さを減少させるために有効な手段です。
基本的なスクリプト
int submMethod(int a, int b){
return a+b;}

最初のintは関数が処理結果として返す「戻り値」の型を表しています。
submMethodは関数の名前です。
(int a, int b)は関数がint型の値を2つこ「引数」として受け取るという意味。
{}の中は関数の処理です。returnは簡単を呼び出した元へ値を返すという記述です。
このスクリプトの場合、受け取ったint型の「a」と「b」の値の 足し算した値を呼び出した元へ返します。



戻り値の型 関数名(引数の型 引数,……){
   ……仕事中身……
   return 戻り値


}
  • クラスが担当する仕事を「メソッド」という
  • メソッドが仕事する際に受け取るものを「引数(ひきすう)」と呼ぶ
  • メソッドが仕事して返すものを「戻り値(もどりち)」もしくは「返り値(かえりち)」と呼ぶ
  • メソッドは、引数を0個以上受け取って、仕事をし、戻り値を0個~1個返す

メソッドとインスタンスの書き方

※インスタンスの使い方を書く前にメソッドの書き方を知らなければならない。

インスタンスの生成はメソッドの中に書きます。ここでは実際に動かすことは想定してません。後のページでの理解ができればいいです。


~メソッドとインスタンスのみ~
public static void メソッド名(){

クラス名 変数名;
     変数名 = new クラス名();
     変数名.クラスの中のフィールド= "詳細内容";



public static void の部分は返り値と呼びます。前項でも書きましたが、
どのような戻り値という値が必要かによって
void メソッド名であったり
public static void メソッド名であったりします。 返り値についてはまた詳しく説明します。※2

正しくメソッドのテンプレートであるなら
~メソッドとインスタンスのみ~
(アクセス修飾子) メソッド名(){
 クラス名 変数名;
     変数名 = new クラス名();
     変数名.クラスの中のフィールド= "詳細内容";



※2
■返り値 なんらかの結果を得るメソッドではどんなタイプの値を得られるのか指定します

 
例 Helloクラス
public class Hello{
    /***フィールド****/
    public string name;
    public int age;

   /***メソッド****/
    public static void test(){
    Hello taro;
   taro = new Hello();
   
    }
/*********/
}

もし クラス名がpublic class Hello{~ であるならHello 変数名;となります。変数名はここでは、自身が決めたtaroと適当な名前を用意します。

public static void test()
{
  Hello taro;
  taro = new Hello();

}


■Hello taro;
これはHelloクラスのインスタンスを参照する入れ物としての変数が用意されるだけで中身は何も入っていません。


インスタンスの生成

■taro = new Hello();
クラスHelloのインスタンスがnewキーワードにより生成される。

クラス名 変数 = new クラス名();

taro = new Hello();
生成されたインスタンスは、そのままではただ存在するだけで、アクセスすることができない。

生成されたインスタンスに内容を与える

 
例 Helloクラス
public class Hello{
    /***フィールド****/
    public string name;
    public int age;

   /***メソッド****/
    public static void test(){
    Hello taro;
   taro = new Hello();
     /*↓追加部分↓*/
     taro.name = "太郎";
    
}
/*********/
}


変数名.クラスの中のフィールド= "詳細内容";



taro.name = "太郎"; と追加しました。 nameは先にフィールドで定義してあります

taro = new Hello();として作ったあとに 
Helloクラスのtaroを作り
中身を taro.name = "太郎"; と追加しました。


更にHelloクラスに花子を追加するなら↓追加部分↓に
Hello hanako; 宣言し
hanako = new Hello();と作り
hanako.name = "花子"; と定義し、追加します。


またtaroに対して更に追加するなら、フィールドに public int age;として、メソッド側に
taro.age = 20;
とtaroに対して.age(フィールドで、設定した変数名)=値;とすれば良いです


引数と戻り値

メソッドは厳密にはオブジェクト指向言語における処理を機能ごとに分けたものであります。
関数と呼ぶ人もいます。
関数は、javascriptでいうとfunctionですね。(厳密には違います。役割的には似ている)
関数は何度も呼び出すことのある処理をまとめたものです。
プログラムが始まるメイン処理のことはメインメソッドと呼びます。メインメソッドから呼ばれるサブ処理のことはサブメソッドと呼びます。サブメソッドから呼ばれるさらなるサブ処理もサブメソッドと呼びます。
メインメソッドについての詳しい説明は後述,
unityで、メインメソッドを使うのは、かなり後。
http://no23.xrea.jp/learning/cs/cs0301Method.html

引数と戻り値は、他のclassからメソッド(関数)を呼び出す際に使用します。

引数と戻り値のないメソッド

引数がない場合は () の中は書きません。戻り値がない場合は空洞を意味する void 型を定義します。

引数と戻り値のないメソッドの使用例 ソース
http://www.kisoplus.com/kihon/method.html


class Print クラス
{
  <中略 フィールド>
  public void print_method( ) メソッド宣言部 関数※
   {
       処理 関数内容
   }
  <中略>
}
class main_program
{
 public static void Main( ){
      Print pri = new Print( ); //(1)オブジェクト作成
      pri.print_method( ); //(2)関数呼び出し※
   }
}


処理の流れ
1番目のclass、Printに、とある処理をする関数メソッドprint_methodを用意したとします。
2番目のclass、main_programでオブジェクト(変数)を作成しprint_methodを呼び出します。

更にこれを具体的に考えて言い換えると
1番目のclass Printの
メソッド、print_methodの処理は、
例えば 何かを印刷する処理とします。
2番目のclass main_programでは、print_methodを呼び出して単純に実行します。

このprogramは、利用者の利用を想定するなら、ただ単純に印刷するだけです。
これでは、いちいち一回ずつ、つまり1枚ずつしか印刷できません。


引数あり、戻り値のないメソッド

メソッドには、このほか引数と呼ばれるものがあります。メソッドを呼び出す際に、何らかの値を渡す必要がある場合は、メソッド名に続けて( )内に、渡すデータ型と、それを識別するための変数名を記述します。

class Print
{
  <フィールド 中略>
  public void print_method(int a) 引数あり 戻り値なし
   {
      処理 例(何かを印刷する処理)
 }
  
}
class main_program
{
 public static void Main( ){
      Print pri = new Print( ); //(1)オブジェクト作成
      pri.print_method( 5 ); //処理(2)メソッド呼び出し
     
  }
}

引数を渡すことで前項と違い、呼び出した関数 メソッド print_methodに対して値を渡すことができます。
単純に考えると「5枚印刷しなさい」とできます。

この5の値はmain_programの(2)から発令され、
呼び出した関数
public void print_method(int a)
のint aに一時的に渡され、処理に使用されます。
この場合、()の中の変数名はaでもxでも構いません。
型は数値型として intを使用しています。
枚数の指定として作うのでintにしたわけです。
このprogramは、利用者の利用を想定するなら、ただ単純に5枚印刷するだけです。
しかし、これらを応用して5を変数にし、更に利用者が好きな枚数に印刷させることも可能です。※趣旨と外れる為除外とします。



”答えがほしい処理は…”
他にこのような引数の利用が想定できます。
メソッド部に変数に対して値を足す(計算)処理として
他のclassからメソッドに対して値を指定する。
ですが、今習った引数のみの書き方ですと答えは戻らず、単純に処理だけを実行するだけです。





引数あり、戻り値ありのメソッド

前項では、処理の流れのみを体系的にわかりやすくする為にメソッドの処理内容を「何かを印刷する処理」としましたが、
今回は、「答えをほしい処理」として「メソッドは計算する処理」と仮定します。
戻り値 答えがほしい場合、voidは使用しません。

アクセス修飾子(例 public)+変数型(例 int)+メソッド名(引数)…等とします。

class Math
{
 public int anser1; フィールド
public int  math_method(int a) 引数あり 戻り値あり
  {
     処理 例(何かに対して計算する処理)
}
 
class main_program{

public static void Main( ){
      Math anser1 = new Math( ); //オブジェクト作成(1)
      int b = anser1.math_method( 5 ); //処理(2)メソッド呼び出し
<中略>
 }
}
 


}

答えを"プレビュー"する処理は省いて書いていませんが、単純に答えを得る処理例として記述しました。
処理の流れの考え方
int bは、まず考えずに、前項の通りanser1.math_method( 5 ); をみると
class Mathのmath_methodを呼び出し引数を5とします。(2)
これで 何かに対して5で計算しなさいと発令します。
厳密にいうと、計算の処理の部分は、くどいですがらmath_methodで行います。
ですので、5の引数を与えられたらmath_methodが「変数に引数で足し算する」という処理をもつなら
変数+5(引数)である。
加えて、もしも、math_methodが変数ではなくて単なる数値1であるなら
1に足す処理で
1+5(引数)である。

最後に答えはint b に入る。

もう少し、C#に詳しなれば、int bをプレビューできるし、他の計算もできるが、
今はクラスとメソッドの理論(アルゴリズム)がわかればいいので、ここではやらない。

アクセス修飾子

public どこからでもアクセスできる
private 同一クラス内のみアクセスできる
protected 同一クラス、派生クラスのみアクセスできる

アクセス修飾子を省略するとプライベートなメンバとしてみなされます。
引用元 http://www.kisoplus.com/kihon/acc.html

同じクラス内でメソッドを呼び出す

クラス内に記載してあるメソッドを、同じクラスから呼び出すことも出来ます。呼び出し方は簡単です。
メソッド名を記載すれば良いのです。たとえば、メソッド名が引数なしの「print_method」なら、ソースファイル
に「print_method();」と記載すれば良いのです。引数がある場合は print_method( 引数に与える値 );です


class Print ・・・クラス
{
  <中略 フィールド>
public void print_method( ) メソッド 関数 宣言部 ※
  {
      関数 処理内容
  }
 public static void Main( ){
    print_method( 5 ); //処理(1)メソッド呼び出し
    
 }
}



戻り値(返値)がある場合

 return 戻り値;

http://www.wisdomsoft.jp/172.html


引用元

http://www.atmarkit.co.jp/ait/articles/0209/04/news001.html
http://www.kisoplus.com/kihon/acc.html



C#簡易入門5
C#簡易入門4

  • 最終更新:2016-03-01 00:49:56

このWIKIを編集するにはパスワード入力が必要です

認証パスワード