「C Sharp」の版間の差分

ナビゲーションに移動 検索に移動
1,108 バイト追加 、 1 か月前
→‎※編集中: タプルとかrecordとか、ああいうC#独自のC++とかには無いかマイナーなのを、ひとまとめにする節を新設。
(→‎※編集中: タプルとかrecordとか、ああいうC#独自のC++とかには無いかマイナーなのを、ひとまとめにする節を新設。)
もし、上記コードから<code>const</code>のキーワード部分を消せば、コメントアウトした<code> a = 7; </code> をコメントアウトしなくても実行できるようになります。読者はそれぞれ試してください(ほぼ同じ内容の繰り返しになるので、説明は省略)。
 
=== タプル ===
複数の変数を宣言する際、タプル taple と言うものを使って、<code>( )</code> で、まとめて宣言できます。
 
配列やクラスなどとの違いは、単に配列名やクラス名などに相当する名前が無くても、宣言できるぐらいです。
 
つまり、データの集まりを無名で定義できます。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, int b) =(15, 2);
 
Console.WriteLine(a);
Console.WriteLine(b);
b=5;
Console.WriteLine(a);
Console.WriteLine(b);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
2
15
5
</syntaxhighlight>
 
タプルは単に変数の宣言をひとまとめに行うだけのものなので、宣言したあとは、それぞれの変数は、普通の変数と同様に上書きしたり計算したりできます。
 
このため、タプルを使わなくても、ひとつひとつ変数を宣言しても、同じ結果の処理が同じくらいのソースコード量で可能です。
 
 
データ型の異なる要素どうしも、下記のようにタプルでひとまとめに出来ます。実質的に、タプルは無名クラスのようなものでしょう。
 
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, string g) =(15, "hello");
 
Console.WriteLine(a);
Console.WriteLine(g);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
hello
</syntaxhighlight>
 
 
タプルは無名で使うためのものですが、名前をつけても構いません。タプルに名前をつけた場合、個々の項目の要素へのアクセスには、下記のように <code>Item1</code> , <code>Item2</code> などのプロパティを使います。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, string g) =(15, "hello");
var k = (a, g) ; // 変数名は k
Console.WriteLine(k.Item1);
Console.WriteLine(k.Item2);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
hello
</syntaxhighlight>
 
 
タプルの項目に名前をつけることも出来ます。こうすれば、Itemで何番目だったかを覚える必要はないし、もしタプル内の順番の入れ替えをしてもコードの修正を減らせます。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
var k = (year : 18, msg : "good morning" );
Console.WriteLine(k.year);
Console.WriteLine(k.msg);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
18
good morning
</syntaxhighlight>
 
=== foraech ===
マイクロソフトの公式サイトにもありますが、たとえば foreach という機能が、C++ ではなかなか入門レベルでは見かけず独特です。(C++にもC++11以降は似たような機能はあるが、記法がだいぶ違う。)
 
以下、マイクロソフト[https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/using-foreach-with-arrays msdnのコード例『配列での foreach の使用 (C# プログラミング ガイド)』2022/04/06](2022年6月に確認)を参考にしたものです。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class Hello {
public static void Main(string[] args) {
 
int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers) {
System.Console.Write("{0} ", i);
}
System.Console.Write("\n");
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
4 5 6 1 2 3 -2 -1 0
</syntaxhighlight>
 
foreach は、配列などのグループ的なまとまりをもったデータ構造をfor的に巡回させたいとき、いちいちループ条件文にて配列の要素数を指定しなくても、上述のようにforeach文中で <code>in 配列名</code>を指定すれば、それをもとに自動的に第0項から最後の項まで巡回するようにループ条件を設定してくれる機能です。
 
正確な言い回しなどは、MSDN 公式サイトを見てください。
 
=== 書式指定 ===
 
数値以外も対応可能な形式として、特に指定のない事を明示する場合、<code> {0:g} </code> のように「:g」をつける方法もあります。一般 general の g です。
 
 
 
=== 条件分岐 ===
よって、上記コードのように、switch式の結果(右側)では、命令ではなく値だけを指定して事前に用意された変数に代入することになる。別途、その結果を代入した変数をつかって目的の処理をする命令が必要である。
 
=== ※ オブジェクト的なもの ===
=== record型 ===
※ あとで適切な題名を考える。暫定的なタイトル。
 
C#には、プログラミングを効率化するために、あらかじめ、よく使いそうな処理をまとめたものが提供されています。
 
標準C言語やC++にはないが、よく使われる機能が、言語仕様として提供されています。
 
それを使わずとも、C言語などにある機能だけでもプログラミングは可能ですが、しかしC#の提供する専用機能を使うことで、コードが短くなったり、集団開発ではプログラマーたちによるバラツキが無くなるので品質が一様化して効率化したり、いろいろと便利です。また、コードの各部の意図も、C#の専用機能をつかうことで明確化するので効率化します。
 
例外的に標準C言語との互換性の高いコードを書きたい場合でもないかぎり、積極的にC#の専用機能をつかうことで、コードの短縮や品質安定につながるでしょう。
 
 
==== タプル ====
複数の変数を宣言する際、タプル taple と言うものを使って、<code>( )</code> で、まとめて宣言できます。
 
配列やクラスなどとの違いは、単に配列名やクラス名などに相当する名前が無くても、宣言できるぐらいです。
 
つまり、データの集まりを無名で定義できます。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, int b) =(15, 2);
 
Console.WriteLine(a);
Console.WriteLine(b);
b=5;
Console.WriteLine(a);
Console.WriteLine(b);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
2
15
5
</syntaxhighlight>
 
タプルは単に変数の宣言をひとまとめに行うだけのものなので、宣言したあとは、それぞれの変数は、普通の変数と同様に上書きしたり計算したりできます。
 
このため、タプルを使わなくても、ひとつひとつ変数を宣言しても、同じ結果の処理が同じくらいのソースコード量で可能です。
 
 
データ型の異なる要素どうしも、下記のようにタプルでひとまとめに出来ます。実質的に、タプルは無名クラスのようなものでしょう。
 
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, string g) =(15, "hello");
 
Console.WriteLine(a);
Console.WriteLine(g);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
hello
</syntaxhighlight>
 
 
タプルは無名で使うためのものですが、名前をつけても構いません。タプルに名前をつけた場合、個々の項目の要素へのアクセスには、下記のように <code>Item1</code> , <code>Item2</code> などのプロパティを使います。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
(int a, string g) =(15, "hello");
var k = (a, g) ; // 変数名は k
Console.WriteLine(k.Item1);
Console.WriteLine(k.Item2);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
15
hello
</syntaxhighlight>
 
 
タプルの項目に名前をつけることも出来ます。こうすれば、Itemで何番目だったかを覚える必要はないし、もしタプル内の順番の入れ替えをしてもコードの修正を減らせます。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class sample {
public static void Main(string[] args) {
 
var k = (year : 18, msg : "good morning" );
Console.WriteLine(k.year);
Console.WriteLine(k.msg);
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
18
good morning
</syntaxhighlight>
 
==== foraech ====
マイクロソフトの公式サイトにもありますが、たとえば foreach という機能が、C++ ではなかなか入門レベルでは見かけず独特です。(C++にもC++11以降は似たような機能はあるが、記法がだいぶ違う。)
 
以下、マイクロソフト[https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/using-foreach-with-arrays msdnのコード例『配列での foreach の使用 (C# プログラミング ガイド)』2022/04/06](2022年6月に確認)を参考にしたものです。
 
:<syntaxhighlight lang="csharp">
using System;
 
public class Hello {
public static void Main(string[] args) {
 
int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers) {
System.Console.Write("{0} ", i);
}
System.Console.Write("\n");
}
}
</syntaxhighlight>
; 実行結果 :<syntaxhighlight lang="text">
4 5 6 1 2 3 -2 -1 0
</syntaxhighlight>
 
foreach は、配列などのグループ的なまとまりをもったデータ構造をfor的に巡回させたいとき、いちいちループ条件文にて配列の要素数を指定しなくても、上述のようにforeach文中で <code>in 配列名</code>を指定すれば、それをもとに自動的に第0項から最後の項まで巡回するようにループ条件を設定してくれる機能です。
 
正確な言い回しなどは、MSDN 公式サイトを見てください。
 
==== record型 ====
C#9からrecord型が追加された。書き換えを禁じるデータ構造である。
 
23,094

回編集

案内メニュー