モチベーションも大事だと思うので覚書として使用します。
一週目は、北米Amazonで購入した英字キーボードのレジストリ設定に始まり、
コードは一行読むのに20分かかっていたのが、10分、3分今は何も見ずある程度理解できてきた。
実際の型の使い方を覚え書くようになると、子供の頃ハッカー気分でカタカタ遊んでたのを思いだした…
1.styleと原則
①読みやすくPascal形式(クラス名プロパティ名メソッド名構造体等)BackColor や FormBorderStyle
②但し3つはcamel形式使う。(パラメータ、public以外のフィールド、ローカル変数)backColor や formBorderStyle
③表記ブレ防ぐjpeg, jpg, message, msg, win, windows
④桁位置合わせ スペースうまく使って=をあわせる
⑤変数とループにもスタイルがある(クラスのメンバ変数=フィールド。
C++ プログラマはメンバ変数に "m_" を付ける習慣がありますが、
フィールドをあらわすFを付けることをすすめます。というのはm_の2文字よりコンパクトになる)
⑥xxxManager / xxxControllerとかの説明系は長い
⑦get / setはプロパティで使うから、代わりにload, save, add等を使う。
checkは意味が広すぎて何してるか分からないから具体的にisNull, isEmpty
テスターに遭遇した場合
2.オブジェクト指向
明確な答えはない、効率的なモノ作りをするための思考と解釈。 プログラミングの変数やそのプロパティ、その継承も効率的なモノ作りのためです。 (説明しろと言われたらそう答えたい)3.初めて知った用語
classやpropertyには、 名詞
method メソッド名には、動詞
コミット:変更(ロールバック:取り消す)Githubでソース管理を行い問題ないと判断した場合にコミットして変更情報を確定
デバッグ:バグ&修正
パス:PATH 場所 絶対パスc:---.txt
変数(=クラスclass データの箱 VARiable)
関数(=メソッドmethod, func 処理の箱) 代入(=と違う)
関数について:1処理名→2引数入れる(実行させたい値.別名パラメータ)→3実行→4戻り値(結果の値)
プロパティ:9.変数-④参照
- クラス:変数、設計図
- オブジェクト:クラス、メソッド両方(値入ってても入ってなくても)、オブジェクト指向は全てのモノ、データ
- インスタンス:クラス(値まで入ったクラス) 動詞:インスタンス化する
ture(真)false(偽) ==等しい <=以下 >=以上
冗長…曖昧語、多くの業態で失敗に備えた予備として使用。
ex)代替サーバーを用意し冗長性をもたせる←明らか肯定文。重複し長くて無駄という意味もあるが…
- 記号
#ナンバーサイン
{} 波括弧 ブレイス
'クォート
"ダブルクォート
~ チルダ
_ アンダースコア
* アスタリスク
, コンマ .dot
& アンパサンド
$ ダラー
^キャレット
4.VisualStudio 扱い方/キーボードUS配列設定
注意:Insertキーで上書き/挿入モード切り替わってしまう。
ショートカット: Ctrl+K(N)(F) ブクマ(移動)(整形) +G 行 +M 畳 +Shift+L 行削除
・キーボードUS配列設定
1.コンパネ>システム>デバマネ>キーボード削除>メニュの操作>
ハードウェア変更のスキャン(キーボード復活したら閉じる)
2.レジストリ>MSの言う通りにする
3.レジストリ> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\
内の使用してるInputツールのLayout関連の該当DLLを片っ端からJPからUSにする(GoogleやIME)
4.再起動後、Alt+`きかない場合、Google日本語入力再インストール(タスクから辞書ツールのエクスポート後)
5.Hello, World(Console.WriteLine 文+改行)
uncs(p/i)ci
console.WriteLineは文+改行、console.Writeは文(code内で改行しようと1行となる)
// myname01.cs
using System;←システム使う宣言で必要
namespace practice;←クラスの上の階層でパックできる
class MyName01←クラスでカプセル化する宣言
public static void Main()←必ずMainメソッド。パブリックスタティックボイドメイン()
//publicアクセシビリティ(クラス外呼出可能)staticクラスのインスタンス外呼出可能
void値返さない()には引数((実行させたい値.別名パラメータ.コマンドライン引数))書ける
インスタンスはクラスメンバーを基にして実際に値まで入った実体(宣言しただけはゴミと同じ)
//Hello, World
Console.WriteLine("Hello, World");
Console.WriteLine("私の名前はh.okabeです");
//Write(ただ書くだけ改行なし!)
Console.Write("あ");
Console.Write("い");
Console.Write("う");
Console.Write("え");
Console.Write("お");//下記コードとも繋がる
※{}で改行するのは見やすくするためのルール(インデントという)
6. string.Format() をやめて$"{}";
var testerString =
"\n入力内容の確認:\n" +
$"Tester number: No.{counter}\n" +
$"Tester Name: {t.Name}\n" +
$"Tester Age: {t.Age}\n" +
$"Tester Country: {t.Country}\n" +
$"Tester Lang: {t.Lang}\n" +
$"Tester Response: {t.Response}\n" +
$"Tester Rating: {t.Rating}\n" +
$"Tester Specialty: {t.Specialty}\n";
Console.Write(testerString);
/*
Console.WriteLine("\n入力内容の確認:");
Console.WriteLine($"Tester number: No.{counter}");// counter
Console.WriteLine($"Tester Name: {t.Name}");
Console.WriteLine($"Tester Age: {t.Age}");
Console.WriteLine($"Tester Country: {t.Country}");
Console.WriteLine($"Tester Lang: {t.Lang}");
Console.WriteLine($"Tester Response: {t.Response}");
Console.WriteLine($"Tester Rating: {t.Rating}");
Console.WriteLine($"Tester Specialty: {t.Specialty}");*/
//変数の扱い方(C#6以降、文字列補間)
int a = 10, b = 20, total = a + b;
Console.WriteLine($"{a}+{b}={total}");//{}で囲まないと文字列なる
6以前
Console.WriteLine(a+ "+" +b+ "=" +(a+b));
←aと"+"とb、と"="と(a+b)。と表示される、演算子は接続子みたいなもの
正しいですが、その通りややこしいので今はこういう書き方は主流ではありません。
次のように書きます。
Console.WriteLine($"{a}+{b}={a+b}");//+ややこしい、($"{}");表記追加
※変数は{}で囲まないと文字列なる
var now = DateTime.Now;// "2018年04月01日"書式設定も可能
Console.WriteLine($"{now:yyyy年MM月dd日}"
※スペースは見やすさのために入れているので、あってもなくても構いません。
7.書式指定文字(精度指定子は桁数/小数点以下桁数の精度を指定)
("{0:D6}",表示したい値); 例("{0:d6}", 100);//000100 100をDの6桁表示
C通貨 Console.WriteLine("{0:C}", 10000);//\10,000
D10進 Console.WriteLine("{0:d6}", 100);//000333※整数のみ("{0:d}", -100.5);エラー
F小数 Console.WriteLine("{0:f}, {0:f5}", 0.1234); // 0.12, 0.12340※GでFかE簡潔な方表示
P% Console.WriteLine("{0:p1}", 0.1234); // 12.30%
・カスタム
("0")ゼロプレースフォロダ対応する数字に置き換えるなくても0表示。例1234.5678 ("00000") -> 01235
("#")桁プレースホルダー対応する数字に置き換えるなければ非表示、整数は#有無関わらず表示1234.567("#.##") -> 01235
Console.WriteLine("{0:#.##}", 1234.567);1234.57
Console.WriteLine("{0:#,#.00}", 1234567);123,456,7.00※#と0の合わせ技。#,#で三桁区切、00で小数点以下0詰
Console.WriteLine("{0:D6}", 333);
Console.WriteLine("{0:C}", 10000);
Console.WriteLine("{0:e}", 1234);
Console.WriteLine("{0:E}", 123456789);
Console.WriteLine("{0:e10}", 1.23456789);
Console.WriteLine("{0:f}, {0:f5}", 0.1234);
Console.WriteLine("{0:p1}", 0.1234);
Console.WriteLine("{0:p2}", 0.1234);
Console.WriteLine("{0:#,#.00}", 1234567);
Console.WriteLine("{0:#,#.00}", 1234567890);
Console.WriteLine("{0:#.##}", 1234.567);
8.Console.ReadLine(); 質問、入力値を返せる
using System;
namespace practice//名前空間(namespace、classの上階層で名前つけて整理 N1やN2と表せる)
{
class Program//ユーザー定義型
{
static void Main()//メソッド
{
Console.WriteLine("あなたの名前を入力してください");
string name;
name = Console.ReadLine();
Console.WriteLine("あなたの年齢を入力してください");
string age;
age = int.Parse(Console.ReadLine());
//デフォはStringなのでint.Parse()で囲むと文字列を整数型として変換できる
Console.WriteLine($"{name}さんは{age}歳です");//AさんはB歳です
//{}も文字にしたい場合ブレイス2個追加で($"{{{name}}}。"も文字にしたい場合\追加で\"とする。
Console.WriteLine($"\"{{{name}}}さんは{{{age}}}歳です\"");
}
}
}
9.変数(class VARiable)とデータ型の詳細
①変数と関数
1クラスは、データとその振る舞いをカプセル化したもの
(データはフィールド(メンバ変数)、振る舞いは関数(メソッド)と言える)
2この1つのオブジェクトが持つ範囲の値をフィールド(メンバ変数)(メソッド宣言時)という。
3コンストラクタはクラスをインスタンス化した時にフィールドの初期化できる
4関数は[修飾子] 戻り値のデータ型 メソッド名(引数1, 引数2, ....){省略}//チャンネルを変えろでなくチャンネルを1chに変えろだと()に引数1chがはいる-
(変数にはint型変数(int x;)やstring型変数(string str;)等データ型しか入らない、別の箱に入れるというかコピーできる)
(ちなみにデフォである機能なので組み込み型という、Person等自分で作った変数はユーザー定義型)
これはいちいち整数int文字列stringとわけずとも、1つのデータとしてまとめる事できる
例1
前の書き方
private int fuga;//(関数 メソッド フィールド メンバ関数)
public int Hoge{
get{ return fuga; }// get{return フィールド名;}
set{ fuga = value; }//set{フィールド名 = value;}
}
//前のプロパティ定義の仕方
class Person
{
public string name; // 名前
public uint age; // 年齢
public string address; // 住所
}
これでPersonというユーザー定義型を自分で作った&プロパティ作った事に
※定義しただけなので"ゴミが入っている"と俗に言う
②初期化
(定義した変数に値代入すると"初期化"という、その値の事を"初期値"という)
※変数を宣言と同時に初期化した状態(10は初期化子という)→int x=10;//あとから代入int x; x=10;の事を動的初期化という
変数に同時に初期化子代入で初期化、あとから初期値代入が動的初期化。
ちなみにこの変数にconstフィールドを付加して定数(constant)にできる。
※定数は定まった数で確定できる(変更してもコンパイルエラーなるから分かりやすい)
定数型は3つconst、readonly、static readonlyがあり、それぞれ特徴が違う。
constは変数宣言時のみ可能(const int x=10;)
readonlyは宣言時、コンストラクト内も可能。但しconstより遅い
static readonly(基本これ使う)は定数にシンボル名必要でもconstのように使える
変数は最初にデータ型例えばint(整数型) 次にスペースあけて変数名
例えばx; yourAge; myAge;等(但し先頭数字不可・予約語(キーワード)不可例えばclassやusing)
int x; となる。複数もできる int x,y;この場合 int x,y = 5,z;
x=12; もしくわまとめて int x = 10;
x=5; ←あとから代入された整数が正しい
x=5.1;←小数点は整数型ではないのでコンパイルエラーなる!
int a=10, b=20;
③値型 参照型
int x=10;値型 str="10"参照型
・値型には直接値が格納。x専用メモリ作成される
ex )
変数 A の値を変数 B へ代入した時、値がコピーされて渡される。
変数 A が持っている値、変数 b が持っている値、と実体は 2 つある。
・参照型には「実体がどこにあるのかという情報」が格納。実体はずっと別の場所(ヒープ)に確保。
定義した時点でその全てはその場所から参照された残像みたいなもの。
ex )
変数 A の値を変数 B へ代入した時、変数 B には値のアドレスが渡される。
変数 A が持っているのは、値がいる番地001。
変数 B が持っているのも、値がいる番地001。
実体である値は番地 001 にしかいない。つまり実体は 1 つしかない。
複数の場所 ( 変数 ) から、1 つの実体をみている。
④プロパティ
メソッドを変数のように扱えるため実際にはメソッドなのにまるで変数を操作しているよう
メソッドの中にはかけないクラスの中に書く、そのためクラスプロパティメソッドインスタンスの順に書く
クラスの値が持つ範囲(フィールド)別名メンバ変数
フィールドの値を取得、設定する窓口(プロパティ)、隠蔽。
クラス外部から見るとメンバ変数(フィールド)のように振る舞い、 クラス内部から見るとメソッドのように振舞う
name | age |
---|---|
田中 | 18 |
佐藤 | 22 |
山本 | 34 |
このような表を作りたいとする。 |
index4.php
<?php
// Staffというクラス(型)を宣言。クラスの1文字目は大文字(Pascal)
class Staff {
>// property
public $name;
public $age;
}
//クラスStaffのインスタンスを作成
$tanaka = new Staff;
//インスタンス名->プロパティ名 ※プロパティの"$"はつけない
//tanakaというインスタンスのプロパティ$nameに、tanakaを挿入。
$tanaka->name = "tanaka";
echo $tanaka->name; // tanaka
//クラスStaffのインスタンスを作成。(引数で$nameを入れてあげます。)
$tanaka = new Staff("tanaka");
echo $tanaka->name; // tanaka
$tanaka->Hello(); // hi, i am tanaka!
流れ↓
uncs(p/i)ci=using,namespace,class,
(public) static void Main(string[] args)/public PROPERTY(int Age{get; set;})/public interface
constructa(値代入),instance(←new演算子)
・public以外のアクセシビリティ
public どこからでもアクセス可能
protected クラス内部と派生クラスの内部からのみアクセス可能
private protected(C# 7.2)同一プロジェクト内のクラス内部と派生クラスの内部からのみアクセス可能
private クラス内部からのみアクセス可能
-
自動実装プロパティ2(新しい書き方)
// var ... new... {instance}
// 実行文
using System;
namespace memberlist
{
class Person
{
//private string name;//フィールド
//private int age;
public string Name { get; set; }
//{
// get { return name; }
// set { name = value; }
//}
//get{return フィールド;}set{フィールド=value}
//getで値呼び出せる、setで値設定できる
public int Age { get; set; }
//{
// get { return age; }
// set { age = value; }
//}
}
class Program
{
static void Main(string[] args)
{
var person= new Person { Name = "シュミット・ダニエル", Age = 1992 };
Console.WriteLine($"{person.Name}は{person.Age}年生まれです。");
//var p = new Person()//インスタンスにnew演算子で値代入(コンストラクタ)
//{
// Name = "Taro Yamada",
// Age = 30
//};
//Console.WriteLine("{0} ({1})", p.Name, p.Age);
// var ... new... {instance}
// 実行文
var person2 = new Person { Name = "東口 順昭", Age = 1986 };
Console.WriteLine($"{person2.Name}は{person2.Age}年生まれです。");
}
}
}
// var ... new... {instance}
// 実行文
//あとはインスタンス生成してくだけ
//public string Name { get; set; }は{get;}のみでも使える
//(get-only プロパティ;読み取り専用なので、コンストラクタ内で代入するのみ)
//(この読み取りはget専用でget以外newとかはreadonlyでも可能)
//省略されたFieldはどこ行ったのか、BackingFieldに格納されてるらしい(必要なったら勉強)
//Field、setのみならず、値代入(コンストラクタ)も省略できるようなった。
//uncs(p/i)ci
・自動プロパティでクラスとプロパティのみになり、コンストラクタはget;}後ろに="ダニエル";でOK
(プロパティは必ずクラスにつき、静的メソッドの中にはつけない、そのためクラスプロパティメソッドインスタンスの順なり、インスタンスはクラス内のプロパティ下の後ろのメソッド内で記述する事になる)
また、インスタンス化はNew演算子でvar p=new 変数名とすれば使える、インスタンスで変数は{p.変数名}とする。
using System;
namespace practice3
{
class Program
{
public string Name { get; } = "ダニエル";
public string Age { get; } = "1991";
public string Name2 { get; } = "シュミット";
public string Age2 { get; } = "1992";
static void Main(string[] args)
{
var p = new Program();
Console.WriteLine($"{p.Name}は{p.Age2}年生まれ");
//staticなメソッドなので変数が含まれるとオブジェクト参照が必要です。というエラー(文字のみならOK)
//static内でインスタンス化すれば普通に使える(それがNew演算子)var p = new Program();の部分と{}内p.変数名とする
}
}
⑤配列(コレクション) New演算子
・配列の宣言と初期化
static void Main(string[] args)
{
var vs = new[] { "あああ","123","daniel" };//全部暗黙
Console.WriteLine($"{vs[0]}");
int[] numbers = new int[3] { 4, 5, 6 };//同時宣言
//int[] numbers = new int[3];//宣言
//numbers[0] = 4;//初期化
//numbers[1] = 5;//初期化
for (int a = 0; a < numbers.Length; a++)
{
Console.WriteLine("{0}番目の要素の値は{1}です。", a + 1, numbers[a]);
}
実行結果
あああ
1番目の要素の値は4です。
2番目の要素の値は5です。
3番目の要素の値は6です。
ダニエルは1992年生まれ
配列は変数の並び。100個の変数が必要なら
int a, b, c, d, e, ...;//このようにいちいち作るわけにはいかない
int[] a = new int[100];//このようにすれば
a[0],a[1],a[2],……,a[99]//という100個の変数が生成される。
・配列 COLLECTION LIST
var vs = new[] { "あああ","123","daniel" };
List(リスト)//list.Add("GHI");//動的に変更
LinkedList(二重リンクリスト)//linkedlist.AddFirst("GHI");//線形データ構造なので要素を追加(削除)すると、元の要素が横にずれてくれる(未知数データの場合使う)
HashSet(セット)HashSet内に指定した要素が存在するかどうかを調べるため
Dictionary(ディクショナリ)連想配列。辞書は単語と意味、Dictionaryはキーと値、dict.Add(1,"One");
Queue(キュー)待ち行列。FIFOスタイル(First In First Out)要素削除せずともFirst Outするため要素数はnのまま循環できる
Stack(スタック)派遣してた時のホテルに重ねた皿LIFOスタイル(Last in First Out)新しい実行履歴から見れる
以上は配列のデータ構造で、どういう順番で表示するかは別個作る。
データ構造は、
[1] 要素を1つ入れる
[2] 要素を1つ取り出す
だけです。
入れたとおりの順序で取り出されてくるのがキュー、
逆順になる(最後に入れたのが最初に出てくる)のがスタック。
他説明
コンテナのためのおまじない
// デフォルトだと、自動的に用意されます
using System;
// リスト、連想配列を使うために必要です
using System.Collections.Generic;
// 順序つき連想配列を使うために必要です
using System.Collections.Specialized;
// コンテナに関するライブラリを使うために必要です
using System.Linq;
コンテナの実例(果物の名前)
// string[]というのは、"文字列(string)が入った配列(コンテナの一種)ですよという意味
// fruitsは配列の名前。中に2つ以上のデータが入ることが前提なので、複数形にします
// {}の中に、順番にデータを書いていきます
// データの中身は、"peach"(桃), "cherry"(さくらんぼ), "tangerine"(みかん), "apple"(りんご)
// 『,』(コンマ)区切りで並べていきます
string[] fruits = {"peach", "cherry", "tangerine", "apple"};
何個あるかチェック
Console.WriteLine(severalEvens.Length);
10.データ型 早見表
Alias | .NET型 | 説明 | Size (bits) | Range (Values) |
---|---|---|---|---|
byte | byte | 符号なし(byteに限り元々Uなし) | 8 | 0 to 255 |
$\color{red}{\rm s}$byte | SByte | 符号あり(なので$\color{red}{\rm Signed}$) | 8 | -128 to 127 |
int | Int32 | 符号あり($\color{red}{\rm Signed}$) | 32 | -2,147,483,648 to 2,147,483,647 |
$\color{blue}{\rm u}$int | UInt32 | 符号なし($\color{blue}{\rm Unsigned}$) | 32 | 0 to 4294967295 |
short | Int16 | 符号あり($\color{red}{\rm Signed}$) | 16 | -32,768 to 32,767 |
$\color{blue}{\rm u}$short | UInt16 | 符号なし($\color{blue}{\rm Unsigned}$) | 16 | 0 to 65,535 |
long | Int64 | 符号あり($\color{red}{\rm Signed}$) $\color{silver}{\rm サL}$ | 64 | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
$\color{blue}{\rm u}$long | UInt64 | 符号なし($\color{blue}{\rm Unsigned}$) $\color{silver}{\rm サL}$ | 64 | 0 to 18,446,744,073,709,551,615 |
float | Single | 単精度浮動小数点Single-precision floating point type | 32 | -3.402823e38 to 3.402823e38 |
double | Double | 倍精度浮動小数点Double-precision floating point type $\color{silver}{\rm サD}$ | 64 | -1.79769313486232e308 to 1.79769313486232e308 |
char | Char | 文字型(Character type) | 16 | Unicode文字 |
bool | Boolean | ブーリアン型 | 8 | True or False 複雑な演算 |
object | Object | 基底の型 Base object たぶん全ての型を継承してる | ||
string | String | 文字列型 | ||
decimal | Decimal | 範囲も精度も高い10進数演算(小数点OK) $\color{silver}{\rm サM}$ | 128 | (+ or -)1.0 x 10e-28 to 7.9 x 10e28 |
DateTime | DateTime | 日付時刻 ※他の日付系統どうなる? | 0:00:00am 1/1/01 to 11:59:59pm 12/31/9999 |
*C#型:(C#で使用する別名の事{エイリアス})
*.NET型:.Net Coreや.NET Frameworkで使用できる共通言語(クロスプラットフォームなら.Net Core)
*Byte:何Byte使うか、必要なストレージ量(扱いたい値が大きくなる程32.64.128..と当然使用ストレージも増加)
*範囲:扱える値の範囲、shortは16ビットだから約3万で短いけどintは32Bなので約2兆!小数点基本double
*.NET型System.はusing Systemすれば不要
*Mの表記はサフィックス(暗黙の変換を防ぐ decimalM, doubleはD, Lでlong/ulong, Uでuint/ulong)
*bit数見て幅、size抑えてメモリ節約
*範囲調べるConsole.WriteLine($"int:{int.MinValue}~{int.MaxValue}");
*数値調べるConsole.WriteLine(100.GetType());
*英語の方が理解しやすい事に気付いた(日本語も覚える必要あるけど。海外とのアドバンテージを感じる…)
11.変換/int.Parse/ToString
ReadLineで数値のユーザー入力の際strをint等に"変換"しないと計算できないから。
(数値を文字にするToString、文字の日付を日付にするDateTime.Parse)
Console.Write("1の位の整数を入力してください:");//intとわかってるので下記で入力と同時に変換
int x = int.Parse(Console.ReadLine());//int.Parse/Convert.ToInt32
Console.WriteLine($"その数字を2倍すると{x * 2}ですね?");
12.構造体struct
struct PERSON
{
char name;
int age;
float sincho;
float taijyu;
}
13.浮動小数点数型(BMIと利息)
累乗 double e = Math.Pow(2, 3);//2の3乗
Console.WriteLine(e);8
1.5丸め Console.WriteLine($"{Math.Ceiling(val)},{Math.Ceiling(-val)}");//2,-1 Ceiling 両方天井・正と正
Console.WriteLine($"{Math.Truncate(val)},{Math.Truncate(-val)}");//1,-1 Truncate単に切捨・定と正
Console.WriteLine($"{Math.Floor(val)},{Math.Floor(-val)}");//1,-2 Floor 両方床 ・定と負
・BMI計算で使う
Console.Write("身長(m)は何mですか。");
double f = double.Parse(Console.ReadLine());
Console.Write("体重(kg)は何kgですか。");
double g = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("BMI={0:#.#}", g/Math.Pow(f, 2));
・利息計算で使う
(decimal=10進演算で精度、範囲ともにup)
複雑なので使う事があれば勉強。今は端折る。
C#でローン返済額計算
14.char 一文字
string p = "ihj";//宣言
char[] array = p.ToCharArray();//変換
array[2] = 'q';//何文字目
p = new string(array);//pにarrayかけた(これないとただの宣言止まり)
Console.WriteLine(p);//ihq array[2]は012ときて3文字目
Console.WriteLine('q');//q
Console.WriteLine("q");//q
15.bool(if(条件!){}else{}) (true or false)
Console.Write("名前を入力してください");
string name1 = "okabe";
name1 = (Console.ReadLine());
if (name1 != "okabe")
Console.WriteLine("Welcome " + name1);
else
Console.WriteLine("We don't know your name.");
//boolは数値でも便利
int mynumber = 2;
if (mynumber >= 2)
//>,<だとfalseなので何も返さないが>=,==,=<でtrueなので文字列発動
Console.WriteLine($"Your number is {mynumber}");
//分岐が複数ある場合else if
int mynumber1 = 2;
if (mynumber1 > 2)
{
Console.WriteLine("Your number is greater than two. ");
}
else if (mynumber1 == 2)
{
Console.WriteLine("Your number is equal to two.");
}
else
{
Console.WriteLine("We don't know your number.");
}
Console.WriteLine("1+1=?");//答えは2
int r;
r = int.Parse(Console.ReadLine());
if (r > 5)
{
Console.WriteLine($"{r}より小さい数値です");
}
else if (r > 2)
{
Console.WriteLine("Close!");//close=近い,おしい
}
else if (r == 2)
{
Console.WriteLine("true!");//以下else if..
}
else
{
Console.WriteLine($"{r}より大きい数値です");
}
16.リテラル(=値)暗黙の変換 値から型/型から範囲 確認方法
//GetType(型調べる)
Console.WriteLine(100.GetType());//int
Console.WriteLine(5.1.GetType());//double
Console.WriteLine(1.7.GetType());//double
Console.WriteLine(3.4.GetType());//double
//MaxValue(範囲調べる)
Console.WriteLine($"int:{int.MinValue}~{int.MaxValue}");