スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
目次
メソッドとは?
メソッドとは、数学でいうところの関数に相当するものです。
例えば、以下のような関数を考えてみます
f(x)=x2+2x+1
xが0の時、f(0)は1です。
xが1の時、f(1)は4です。
xが2の時、f(2)は9です。
ここで、パラメーターのxは、プログラムでは「引数」と呼ばれます。
また、結果であるf(x)は、プログラムでは、「戻り値」と呼ばれます。
f(x)=x2+2x+1という「引数」と「戻り値」の関係を定めている関数が「メソッド」に相当します。
※戻り値のことを「返り値」、「返却値」、「return値」と呼ばれることがあります。
言い換えると以下のようにまとめられます。
「引数」は、インプットに相当します。
「戻り値」は、アウトプットに相当します。
「メソッド」は、インプットとアウトプットとの間のルールに相当します。
※注意※
正確に言えば、上の説明は、引数あり、戻り値ありの単純なメソッドに対する説明となっています。
メソッドは、「引数」及び「戻り値」のないパターンもあります。
「メソッド」とは、「インプットに応じて、それに対応する処理を行い、必要に応じてアウトプットを行う」と言った方がより適切です。
メソッドの簡単な例
ある程度プログラムを学んでいるのであれば、どこかしらで既にメソッドを目にしていると思います。
コンソールアプリケーションであれば、以下のような文を何度も見たことがあるはずです。
Console.WriteLine(引数);
Consoleクラスの中で定義されていえるWriteLineというメソッドです。
※フォームアプリケーションを扱っている人なら、以下の文の方がなじみがあるかも
MessageBox.Show(引数);
これはMessageBoxクラスの中で定義されていえるShowというメソッドです。
メソッドの書き方
メソッドは以下のように書きます。
アクセス修飾子 戻り値の型 メソッド名(引数){
処理文;
}
・アクセス修飾子
アクセス修飾子は、「public」「private」「protected」「internal」の4つがあります。
アクセス修飾子を明記しない場合は、デフォルトのアクセス修飾子が使われます。
※アクセス修飾子がなんであるかという説明は「クラス」という概念を理解する必要があります。今回の記事ではアクセス修飾子の説明は省略します。
・戻り値の型
戻り値の型がint型であればintと書く必要があります。「戻り値」がない場合は、voidと書きます。voidとは英語で「空っぽ」を意味します。
・引数
引数を通して、メソッドに対して必要な情報を引き渡します。引数がない場合は、カッコ()だけ書きます。
引数は複数とることができます。(一方で戻り値はせいぜい1つまでとなっています。)
引数を複数取る場合の例は以下のような関数をイメージするとわかりやすいです。
f(x,y)=x2+y2
引数がxとyで、戻り値がf(x,y)となります。
例えば、x=1,y=2でf(1,2)は5となります。
・処理文
メソッドの中身は、複数の文から成っていることが大半です。以下で紹介する例は、説明の関係上、メソッドの中身は少ないです。
メソッドの形式
メソッドは、必ずしも、「引数」と「戻り値」が必要なわけではありません。
そのため、メソッドは以下のようなパターンに分類することができます。
1:「引数」なし、「戻り値」なしのメソッド
2:「引数」あり、「戻り値」なしのメソッド
3:「引数」なし、「戻り値」ありのメソッド
4:「引数」あり、「戻り値」ありのメソッド
1:「引数」なし、「戻り値」なしのメソッド
「引数」なし、「戻り値」なしのメソッドは、よく使う一連の処理をグループとしてまとめる場合によく使われます。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method3 { class Program { static void Main(string[] args) { Hello(); } //メソッドの定義 static void Hello() { Console.WriteLine("こんにちは"); } } } |
実行結果
こんにちは
static void Hello()
{
Console.WriteLine(“こんにちは”);
}
でHelloメソッドを定義しています
Hello();
でメソッドを呼び出しています。
2:「引数」あり、「戻り値」なしのメソッド
ある一部を除いて似たような操作を行う場合は、引数のあるメソッドが使えるのではないかと疑ってください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method4 { class Program { static void Main(string[] args) { Hello("ジョニー"); } static void Hello(string name) { Console.WriteLine("こんにちは、" + name + "さん"); } } } |
実行結果
こんにちは、ジョニーさん
static void Hello(string name)
{
Console.WriteLine(“こんにちは、” + name + “さん”);
}
今回のHello メソッドは、string型の引数を一つ取ります。
インプットとして与えられた値が変数nameに入ります。
そして、このインプットに対して、
Console.WriteLine(“こんにちは、” + name + “さん”);
という操作をします。
今回の場合は、「ジョニー」というインプットに対して、「こんにちは、ジョニーさん」と表示する操作を行います。
3:「引数」なし、「戻り値」ありのメソッド
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method5 { class Program { static void Main(string[] args) { string txt = Morning(); Console.WriteLine(txt); } static string Morning() { return "おはようございます"; } } } |
実行結果
おはようございます
static string Morning()
{
return “おはようございます”;
}
戻り値のある場合は、return文を使用します。
定義したMorningメソッドを見ると、戻り値としてstring型を返すことがわかります。
今回の戻り値は「おはようございます」となります。
Morningメソッドは呼び出されると、実質的に、string型として扱われます。
Mainのメソッドでは、string型の変数txtにMorningメソッドを代入しています。
最後に、Console.WriteLine(txt);でtxtに入っている値を表示させています。
4:「引数」あり、「戻り値」ありのメソッド
似たような操作を何度もする場合、引数ありのメソッドで簡潔に書くことができるのではないかと検討してみてください(2の「引数」あり、「戻り値」なしのメソッドと同様に)。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method06 { class Program { static void Main(string[] args) { string txt = Morning("ボブ"); Console.WriteLine(txt); } static string Morning(string name) { return "おはようございます、" + name + "さん"; } } } |
実行結果
おはようございます、ボブさん
補足説明
staticに関して(詳しい説明は省きます)
staticを使わずにメソッドを定義することは可能です。(というかむしろ、特殊な場合でしかstaticは使われません)
しかし、staticを使わずにメソッドを説明しようとすると、「クラス」という概念をある程度説明しないと、メソッドが何たるか説明するのが難しくなります。
この記事では、「クラス」の説明を避けるために、staticキーワードを使用しています。
※以下クラスという概念をある程度知っていることを前提に話を進めます※
まず、勘違いして欲しくないこととして、staticはアクセス修飾子ではありません。
staticキーワードを付ければ、クラスをインスタンス化しなくても呼び出せるようにします。
上でも例を挙げた以下のメソッドの定義には、staticキーワードが付いています。
ConsoleクラスのWriteLineメソッド
MessageBoxクラスのShowメソッド
WriteLine メソッドやShow メソッドを使う際に、明示的にConsoleクラスやMessageBoxクラスをインスタンス化した覚えはないはずです。
※自分の目で確認したい場合は、定義に移動して確認できます。まず、Visual Studio上で、「Console.WriteLine」と書きます。「Console.WriteLine」にカーソルをあてて、「F12」ボタンを押すと、Consoleクラスの中身が見えます。
仮に、staticを使わずに、上のソースコードと同様の処理が行えるようにするなら、以下のように、クラスをインスタンス化をする必要があります。
パターン1;デフォルトのクラス(Programクラス)の中にメソッドを定義
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Static01 { class Program { static void Main(string[] args) { Program pr = new Program();//クラスのインスタンス化 pr.Hello(); } void Hello() { Console.WriteLine("こんにちは"); } } } |
実行結果
こんにちは
パターン2:自分で新たにクラスを作る
MyClassクラスの中にHello()メソッドを定義しています。Hello()メソッドが他のクラスからもアクセスできるようにアクセス修飾子はpublicにします。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Static02 { class Program { static void Main(string[] args) { MyClass mc = new MyClass();//クラスのインスタンス化 mc.Hello(); } } class MyClass { public void Hello() { Console.WriteLine("こんにちは"); } } } |
実行結果
こんにちは
パターン(番外編):メソッドの中にメソッド定義
C#では、実は、メソッドの中にメソッドを定義することができます。
今回はMainメソッドの中に、Helloメソッドを定義しています。
しかし、メソッドの中にメソッドを定義すると、非常に見通しの悪いソースコードになります。
私は、業務でこのようなコードを見たことがありません。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Method07 { class Program { static void Main(string[] args) { Hello(); void Hello() { Console.WriteLine("こんにちは"); } } } } |
実行結果
こんにちは
関連記事
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)