C#再考_No3 (C#の基本)


0.はじめに

「独習C#」の内容をベースに考えたことや調べたことをまとめました。

1.第2章:C#の基本

(昔はわかりづらかったこと)

〇 リテラルという言葉がわかりにくかったのですが、値そのもののことで、変数=の右辺に来るものととらえて理解できました。

〇 フィールド:クラスに用意されたデータの入れ物
メソッド:データを操作するための道具

(あんまり使用しないので忘れていたこと、知らなかったこと)

〇 予約語でも@「逐語的識別子」を使用することで変数として利用できます。でもあんまり使いません。

〇 整数の数値型には符号なしがあり、byte以外は先頭にuがつきます。

〇 参照型(string,object)はアドレスがスタックに、値がヒープに格納されます。どっちがどっちか忘れてしまうのですが、大切なことは値型のように値がコピーされて使われるイメージではなく、使いまわされるイメージだと思います。

〇 数値セパレータ:    var a = 123_456_789;
型サフィックス<わかりやすくするために大文字>: 100L, 300.5M[decimal]
文字リテラル:var a = '\u3042'; =>[あ]

〇 文脈上明らかな場合、new式での型名が省略できるようです。
var で変数代入の左辺の型が省略できますが、これで右辺が省略できそうです。
Person型を定義している場合:Person p1 = new("suzuki",20)
通常は var を使えばよいので、フィールドやメソッド呼び出しでnewを直接渡すケースで使えそうです。
new するときは型名省略できないか考えるのは有効そうです。

(よく使う事項)

〇 変数の命名規則:
1文字目はアルファベットかアンダースコアーで指定する必要があります。
変数の命名はcamelCase記法(userName)で、それ以外はPascal記法(UserName)で記載します。

〇 ファイルパスを書くときは@が使いやすいです。これを使わないとエスケープのため\を2つ重ねる必要がでるためです。ちなみにこの中で["]を表したいときは[""]と表現します。
var a =@"C:\Users\Desktop" 

〇 配列の最大のインデックスは、インデックスは0から始まるので、
(変数名).Length-1 となります。

(自分が必要だと思うこと:独習C#に記載がないことも書いてます。)

〇 変数は初期値をなるべく設定するということで、varの使用をお勧めします。

var score = 100.0;

〇 定数は、constとreadonlyがありますが、私は以下のような使い分けがいいと思います。const のほうが処理速度として有利なのですが、ほかにも参照される可能性がある場合はreadonlyを使用したほうが無難だと思います。

//クラスの中だけで利用される
private const double MaxValue = 100.0;
//クラスの外からも利用
public static readonly int Score = 40;
//使用時
(クラス名).Score

〇 整数型は基本intを使い、それを超える場合longを使いましょうとあり、そのとおりだと思います。組み込み系のプログラムをした際にbyteを使用しましたが、使用する分野は限られると思います。
また浮動小数を使用する場合、お金関連の計算が多いのでdecimalも結構意識しておいたほうがいいと思います。
基本的にvar で変数宣言するとint,doubleで解釈されます。

〇 型変換は色んなケースがあるのですが以下のように整理しています。
1)数値型⇒数値型:やらなくて済むように最初から大きめの型を用意しますが、やる場合は明示的な型変換を行います。

 int i = 16777217;
 double d =(double) i;

2)文字列⇒数値:例外よりtrue,falseで扱いたいのでTryParseを使用します

int i;
int j;
//整数
if(int.TryParse("111",out i))
{
    Console.WriteLine(i);
}
//2,8,16進数
if(int.TryParse("11",NumberStyles.BinaryNumber,null,out j))
{
    Console.WriteLine(j);
}

3)数値⇒文字列:数値が入っているならエラーは発生しないので、ToString()で変換します。var x=i.ToString();

〇 null の扱い
null は基本的には使用したくないのですが、排除しきれないときもあると思います。Rust のように null をラップした言語設計でもないので、基本的にはnull は決めているデフォルト値を使うか、Exception投げるかかなと考えています。<基本??を使うイメージです>

1)デフォルト値を使う

string? test = null; //型? null許容型 
//nullの場合デフォルト値
string output = test??"N/A";
Console.WriteLine($"output:{output}");

2)Exceptionを投げる

Person? person = null;
//?. はオブジェクトがnullでなければアクセスする
string name = person?.Name ?? throw new Exception("null error");

〇 配列の書き方
いろいろ紹介されていますが、以下の2つを知っていればよいのではないかなと考えています。配列を使うときはある程度、どういった値にすべきか決まっている時が多いので、なるべく初期化しておくことをお勧めします。
1)宣言のみ:var 変数=new 型[数字];

var data = new double[2, 3];

2)初期化:var 変数=new 型[数字]{};

var data = new double[2,3] { { 1,2,3},{ 4,5,6} };


この記事が気に入ったらサポートをしてみませんか?