プログラミング初心者のpaizaのC#コースメモ１日目

##この記事は？
プログラミング初心者がpaizaさんのC＃講座を少しづつ進めていく日記
paiza https://paiza.jp/
わからなかったこととか調べたことをメモします。

##今日やったこと
- C#入門編1: プログラミングを学ぶ (全9回) 
- C#入門編2: 条件によって処理を変えてみよう (全6回)

## 詰まったこと
### メソッドってなに？
→ステートメント（〇〇;とか〇〇(){};）をまとめたもの

以下自分が調べた順に掲載

>メソッド - C# ガイド | Microsoft Docsより
https://docs.microsoft.com/ja-jp/dotnet/csharp/methods
>>メソッドは、一連のステートメントが含まれているコード ブロックです。 必要なメソッド引数を指定してプログラムからメソッドを呼び出すと、メソッド内のステートメントが実行されます。 C# では、実行されるすべての命令がメソッドのコンテキストで実行されます。 Main メソッドは、すべての C# アプリケーションのエントリ ポイントです。プログラムが開始されると、このメソッドが共通言語ランタイム (CLR) によって呼び出されます。

何をいっているのか理解できなかった。
もしかして日本語訳しているからわからないのか？
→Englishだけで何パターンあるの…？
> English (Australia) English (Canada) English (India) English (Ireland) English (Malaysia) English (New Zealand) English (Singapore) English (South Africa) English (United Kingdom) English (United States) 

それでも食らいついてみる。
>English(UK)
https://docs.microsoft.com/en-gb/dotnet/csharp/methods
>>A method is a code block that contains a series of statements. A program causes the statements to be executed by calling the method and specifying any required method arguments. In C#, every executed instruction is performed in the context of a method. The Main method is the entry point for every C# application and it is called by the common language runtime (CLR) when the program is started.

ステートメントって言葉が大事そう。
ただ、自分が知っているstatementの意味だと文章が理解できない。
こんなとき英語力のなさが恨めしい。

>ステートメント(weblio)
>https://ejje.weblio.jp/content/statement
>>述べること、(文書・口頭による)陳述、声明、供述、陳述、声明書、ステートメント、計算書、貸借表、陳述文

自分が知っている意味以上のものは出てこなかった。
仕方がないのでMicroSoftのページで調べ直し。
>ステートメント (C# プログラミング ガイド)| Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/statements-expressions-operators/statements
>>プログラムが実行する処理は、ステートメントとして表されます。 一般的な処理には、変数の宣言、値の代入、メソッドの呼び出し、コレクションに対するループ処理、条件に応じたコード ブロックへの分岐などがあります。 プログラム内でステートメントが実行される順序は、制御フローまたは実行フローと呼ばれます。 制御フローは、実行時に渡された入力に対するプログラムの応答に応じて、プログラムを実行するたびに変わる可能性があります。

>>ステートメントは、セミコロンで終わる単一行のコードか、1 つのブロックを形成する一連の単一行ステートメントで構成されます。 ステートメント ブロックは中かっこ {} で囲み、入れ子になったブロックを含めることができます。 次のコードは、2 つの単一行ステートメントの例と、1 つの複数行ステートメント ブロックを示しています。

>Statements (C# Programming Guide)
https://docs.microsoft.com/en-gb/dotnet/csharp/programming-guide/statements-expressions-operators/statements
>>The actions that a program takes are expressed in statements. Common actions include declaring variables, assigning values, calling methods, looping through collections, and branching to one or another block of code, depending on a given condition. The order in which statements are executed in a program is called the flow of control or flow of execution. The flow of control may vary every time that a program is run, depending on how the program reacts to input that it receives at run time.

>>A statement can consist of a single line of code that ends in a semicolon, or a series of single-line statements in a block. A statement block is enclosed in {} brackets and can contain nested blocks. The following code shows two examples of single-line statements, and a multi-line statement block:

初心者にとって重要なのは後半部分。(というか前半は理解できていない。)
> statement can consist of a single line of code that ends in a semicolon, or a series of single-line statements in a block.

講座で入力していた〇〇;とか〇〇(){};のことをステートメントと言うらしい。
一番最初に戻って、それらが集まったブロックをメソッドと呼び、contextは順番にって意味だろう。
Mainメソッドがentry pointになるってことはそこから開始しますよって事だろう。
CLRは調べても理解しきれなかったので後日まとめる。→宿題

piazaで書いていたコードを見返してみる。



```
//こんな感じでpiazaでは書いてました。
using System;
public class Program{
    public static void Main(){   
        //ここらへんに課題のコードを書いていく
    }
}
```
多分、`public class Program{`と`}`の間にあるものがメソッド？
そすると次はメソッドとクラスの違いがわからぬ。

>class (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/class
>>クラスは、次の例に示すように、キーワード class を使用して宣言します。

>class (C# Reference)
https://docs.microsoft.com/en-gb/dotnet/csharp/language-reference/keywords/class
>>Classes are declared using the keyword class, as shown in the following example:

なんてことだ。使い方しか書いていない。
ダメ元で見てみた英語も具体例しか載っていない。
検索窓で探してみるとそれっぽいのを発見。
![コメント 2019-12-13 193131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550676/ac23e1eb-2091-606e-2963-9c1d11f9aa81.png)
→だめでした。

>クラスおよびオブジェクトを使用したオブジェクト指向プログラミングについて確認します
https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/intro-to-csharp/introduction-to-classes
>>このチュートリアルでは、開発用に使用できるマシンがあることを想定しています。 Windows、Linux、または macOS 上でローカルの開発環境を設定する手順については、.NET チュートリアル Hello World in 10 minutes (10 分で Hello World) に記載されています。 使用するコマンドの概要については、詳細な情報へのリンクが掲載されている、開発ツールに対する理解を深める方法に関するページをご覧ください。

その下のクラスとオブジェクトが正解でした。
>クラスとオブジェクト
https://docs.microsoft.com/ja-jp/dotnet/csharp/tour-of-csharp/classes-and-objects
>>"クラス" は C# の最も基本的な型です。 クラスは、状態 (フィールド) とアクション (メソッドおよびその他の関数メンバー) を 1 つの単位としてまとめたデータ構造です。 クラスは動的に作成された "インスタンス" の定義を提供し、"オブジェクト" とも呼ばれます。 クラスでは、"継承"と "ポリモーフィズム" をサポートします。これによって "派生クラス" が "基底クラス" を拡張して特殊化できます。

>新しいクラスはクラス宣言を使用して作成されます。 クラス宣言は、クラスの属性と修飾子、クラスの名前、基底クラス (指定されている場合)、およびクラスによって実装されるインターフェイスを指定するヘッダーで開始します。 ヘッダーの後にはクラス本体が続きます。これは、区切り記号 { と } の間に記述するメンバー宣言のリストで構成されます。

日本語だと解釈に悩むところがあるのでUK版も。
>Classes and objects
https://docs.microsoft.com/en-gb/dotnet/csharp/tour-of-csharp/classes-and-objects
>>Classes are the most fundamental of C#’s types. A class is a data structure that combines state (fields) and actions (methods and other function members) in a single unit. A class provides a definition for dynamically created instances of the class, also known as objects. Classes support inheritance and polymorphism, mechanisms whereby derived classes can extend and specialize base classes.

>>New classes are created using class declarations. A class declaration starts with a header that specifies the attributes and modifiers of the class, the name of the class, the base class (if given), and the interfaces implemented by the class. The header is followed by the class body, which consists of a list of member declarations written between the delimiters { and }.

状態とメソッドを一括にしたものがクラス。
ここまではいい。
オブジェクトと呼ばれているものはなんぞ？
クラス自体がそう呼ばれているのか、インスタンスを作るものなのか。
自分の英語力ではわからなかった。→宿題

クラスの説明を読むに、さっきのメソッドの解釈は間違っていそう。
[×]`public class Program{`と`}`の間にあるものがメソッド
[○]`public static void Main(){`から`}`までにある括りがメソッド
で、クラスの中にはメソッドが複数入ることもある…？
(`methods`になっている)


### 結局Console.Write(Line)って何？
→わかりませんでした！

>Console クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system.console?view=netframework-4.8
>>コンソール アプリケーションの標準入力ストリーム、標準出力ストリーム、および標準エラー ストリームを表します。 このクラスは継承できません。

>Console Class
https://docs.microsoft.com/en-gb/dotnet/api/system.console?view=netframework-4.8
>>Represents the standard input, output, and error streams for console applications. This class cannot be inherited.

短いのに理解できない。
ストリーム？

>Stream クラス
>https://docs.microsoft.com/ja-jp/dotnet/api/system.io.stream?view=netframework-4.8
>>バイト シーケンスのジェネリック ビューを提供します。 これは抽象クラスです。

>Stream Class
>https://docs.microsoft.com/en-gb/dotnet/api/system.io.stream?view=netframework-4.8
>>Provides a generic view of a sequence of bytes. This is an abstract class.

バイトシーケンスについて調べようと思ったら、ジェネリック ビューまで検索候補に出てくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/550676/6b1be024-9b64-1b00-9257-6b262babff25.png)
みんなわからないのだと少し安心した。
というかスペースまで再現しているってことはコピペで検索してるな。

と思ったら注釈に概要が書いてあった。
>Streamは、すべてのストリームの抽象基本クラスです。 ストリームとは、ファイル、入出力デバイス、プロセス間通信のパイプ、または TCP/IP ソケットなどのバイト シーケンスを抽象化したものです。 クラスStreamとその派生クラスは、これらのさまざまな種類の入力と出力の汎用ビューを提供し、プログラマとオペレーティングシステムの固有の詳細および基になるデバイスを分離します。

抽象基本クラスとやらはわからないが、データのやり取りに使うよってことだと思う。
ConsoleがクラスでStreamもクラスってことはクラスの中にクラスが入れ込むことがあるってこと？→宿題
それともストリームって言葉を調べたけど、Streamクラスとは別物で調べ直しが必要なのか？

脱線してる気がする。
Consoleがクラスならば状態とメソッドがある。
そのメソッドの中にWrite,WriteLineが含まれているらしい。
>Console クラス
>https://docs.microsoft.com/ja-jp/dotnet/api/system.console?view=netframework-4.8#methods

でもWriteとWriteLineだけでも種類が多すぎて追いつかない。
諦める。→宿題

### varって何？
→あとから変数の型を推測してくれるっぽい。使えるなら使ったほうがよさそう。

Qiitaを使ってるんだから、そこから探してみた。

>var の使いどころ
https://qiita.com/hollydad/items/1516a3f13147a754b9db
var（型推論）の利用指針について
https://qiita.com/Nossa/items/e5e50d2fc1ae8b3e2389

　
>C# のコーディング規則 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions#implicitly-typed-local-variables

あとから見直すことを考えたら変数名で推測できるようにしたほうがよさそう。

### クラスとインスタンス
→宿題
### データの種類
→宿題

##宿題として残したもの
- CLRは調べても理解しきれなかったので後日まとめる。
- オブジェクトと呼ばれているものはなんぞ？
- ConsoleがクラスでStreamもクラスってことはクラスの中にクラスが入れ込むことがあるってこと？
- WriteとWriteLineだけでも種類が多すぎて追いつかない。
- ラスとインスタンス
- データの種類