5/15(金)〜18(月) の学習ログです(主にC言語)

こんばんは。

いつもありがとうございます。

安藤です。

今日はこんな時間に更新です。

 

ここ数日は雨が続いていて少し肌寒いです。

外出の予定がなければ、雨はけっこう好きです。

音や匂い、雰囲気などが好きです。

 

ここには僕の個人的な学習ログをあげております。

 

2020.5.15(金) 
 
C言語(ドットインストールより)
●変数
これはデータにつけるラベル。
データ型の種類
・int(整数)  %d
・float(実数)  %f
・char(1文字)  %c
※他にも色々あるってよ。
 
使い方は、宣言して、代入する。
・int x = 10;
・float y =5.2;
・char  c = “A”;
 
 printf(“x = %d, y = %f, c = %c\n”, x, y, c);
 
 
 
C言語(web記事「苦しんで覚えるC言語」)
●while文
while(条件式) {
繰り返す文;
}
 
ループ回数が分からない場合は、条件式だけのwhile文が便利。
while文は、for文の条件式だけと同じ。
 
●do~while文
後判定と先判定
C言語には、全部で3つのループ文が用意されている。
while文、for文、そして、do~while文。
do~while文は、while文とほとんど同じ。
 
do {
繰り返す文;
} while (条件式);
 
条件式の意味も動作も、while文と全く同じ。
while文との違いは、条件式が後判定なのか、先判定なのか。
while文は、繰り返しの実行の前に条件式を判定する。
do~while文は、繰り返す文の実行後に条件式を判定する。
 
●入力チェック
do~while文は、後判定なので必ず1回は実行される。
その利点は、なんと言っても、入力チェックの時に活躍する。
 
 
◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
オブジェクト指向プログラミングを構成する3原則は、
ポリモーフィズム(動的結合)
・データ抽象(情報隠ぺい)(カプセル化
・継承
であると言われている。
 
オブジェクト指向という考え方は、1960年代後半から40年近くかけて段階的に発展してきたもの。
 
●Simula(シミュラ)の発明
オブジェクト指向プログラミングという考え方は、1960年代後半のスウェーデンで開発されたSimulaというシミュレーション用プログラミング言語が発祥だと言われている。
 
 
 

2020.5.16(土) 
C言語(ドットインストールより)
演算子について
単項演算子
++   --

代入を伴う演算子
x += 5;


C言語(web記事「苦しんで覚えるC言語」)
●プログラムの部品化
作成したプログラムを再び使うことを再利用と呼び、関数として再利用することを部品化と呼ぶ。
部品をたくさん用意しておけば巨大なプログラムであっても、そ部品を組み合わせるだけで完成するので、効率的。

プロトタイプ宣言
予め先頭で関数の形を宣言しておくことで、いつでも宣言した関数は使えるようになる。

唯一、main関数だけはプロトタイプ宣言は不要。

●#includeの正体
これは、printf関数などのプロトタイプ宣言だった。
#include<stdio.h>を記述する理由はこのため。

関数は、
関数名();
このように記述すれば呼び出せる。

●引数
関数に数値を渡す
そのための仕組みが「引数」
引数は、関数に渡す情報の総称
引数は、関数の()の中に書いて指定する必要がある。
引数を使う場合、()の中には渡された数値を格納する変数を宣言しておく。

int sum (int max);

このように使用する変数を指定する部分を仮引数と呼ぶ。
仮引数とは、関数宣言に書かれた引数の型の名前のこと。

関数を変更した場合はプロトタイプ宣言も変更する必要があるけど、
プロトタイプ宣言では変数の型だけで良い。変数名は省略可能。

引数に指定した変数は、その関数の中では普通の変数と同じように使用できる。

●関数に数値を渡す
引数を持つ関数を呼び出す場合、数値を渡す必要がある。
それには、呼び出す時に、()の中に数値を書き込む。
関数に渡す数値のことを、「実引数」という。

引数付きの関数を呼び出す場合は、必ず数値を渡さなくちゃいけない。

●複数の引数
引数はたくさん持たせられる。

int sum (int min , int max)

複数の引数を使う場合は、それぞれを「,」カンマで区切って指定する。
型を混ぜても大丈夫。
複数の引数を持つ関数は、全ての引数に数値を渡さないと実行されないよ。


◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
1980年代、米AT&T社のベル研究所では、C言語オブジェクト指向機能を追加した「C with Class」という言語を開発。この「C with Class」が後の「C++」になる。
Cとの互換性を強調したC++には、低レベルなことも記述できるというメリットと、低レベルなことも記述しないといけないデメリットが共存していた。
その点を改善するべく、1990年代に登場したのがJava
Javaは、C++からCへの互換性を取り除き、その代わりにLispなどからより良い機能を取り込んで誕生した。1990年代に誕生した言語の中で最も成功した言語として世界中で使われている。

ソフトウェア開発の最大の敵は、「複雑さ」。
人間の脳は複雑なものを扱うことに弱い。記憶力と理解力に限界があるため。
年々性能が向上するコンピュータの処理能力の限界よりも人間の理解力の限界によるソフトウェア生産性の限界の方がより厳しい制約になってきている。



2020.5.17(日) 
C言語(web記事「苦しんで覚えるC言語」)
●戻り値(関数値)
関数の前に記述する「型名」は、関数から返る数値の型を示している。
return文は、数値を返すという機能がある。
 
戻り値の制限
戻り値は1つだけしか返すことができない。
 
 
◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」(現在5.4%)
サブルーチンは入力となる引数と出力となる戻り値だけが分かれば、内部でどのような処理をしているのか気にせず使える。システムがブラックボックスの組み合わせで構築されていると、システムの複雑な構造がブラックボックスに隠されているので全体の見通しがよくなる。
 
※サブルーチンとは、コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたもの。
 
 

 

 

2020.5.18(月) 
C言語(web記事「苦しんで覚えるC言語」)
●変数の寿命
関数内で寿命が尽きる変数
ローカル変数の寿命
関数の中で宣言された変数は、関数が終了すると捨てられてしまう。
再び同じ関数が呼び出されたら、もう一度変数を作り直す。
この時、前回とは別のメモリが使われるので、値も変わる。

つまり、関数の中で宣言された変数の寿命は関数の中だけであるということ。
このように、関数の中で寿命が終わる変数を「ローカル変数」と呼ぶ。
また、変数の寿命や有効範囲などをまとめて「スコープ」と呼ぶことがある。

●ローカル変数
関数の中で宣言された変数。
仮引数の変数も同様。
その関数が終わると捨てられ、再度関数が呼ばれた時には新しく作られる。
また、他の関数から使用することはできない。

●スコープ
識別子が有効な範囲を制限する仕組みの総称。
一般的には、変数の寿命と有効範囲を決定する仕組み。

●同じ名前でも別の変数
ローカル変数が有効なのは、宣言された関数の中のみ。
別の関数で同じ名前の変数が宣言されていても、それは別の変数となる。

●関数の独立性
関数を他のプログラムでも簡単に使えるようにするためには、各関数が独立している必要がある。
変数の値が突然変更されるというリスクから解放される。
特に大規模開発では必須。
※古典的言語には、この仕組みがない。

●正確にはブロック内
ローカル変数の寿命が{関数内というのは、正確には「ブロック内」ということ。
ブロックとは、{ }で囲まれている範囲のこと。

グローバル変数
関数外で宣言された変数。
プログラム全体が終了するまで生き残り続け、宣言されたソースファイル内の全ての関数から使用できる。
グローバル変数は、プログラムの開始時に自動的に0に初期化される。

ローカル変数は、関数の呼び出しのたびに作られるので、その度に初期化していると、無駄ななるので自動的に初期化しない。
グローバル変数は最初に初期化すればいいので、それでです。

グローバル変数は、その関数からでも代入や値の取得ができるので便利な反面、どこで値が変更されるか分からない怖さがある。なので、グローバル変数はプログラム全体で共有する特別なデータのみみ使うこと。

※関数内にグローバル変数と同じ名前のローカル変数がある場合
エラーにはならず、ローカル変数を宣言することはできる。
グローバル変数と同名のローカル変数では、ローカル変数が優先される。
これは、関数の独立性を維持するための仕組み。

グローバル変数のスコープは、ファイル内。
基本的には、他のファイルでは使えない。参照できない。
しかし、他のファイルで、変数名と型を指定すると、使用できるようになる。

●関数内で生き残る変数
静的なローカル変数の寿命
ローカル変数とグローバル変数の中間的な存在である変数がある。

関数内で変数を宣言する時に、型名の前にstatic(スタティック)とつけることで、「静的なローカル変数」を宣言することができる。

関数内で宣言されているので、使用できるのは宣言された関数のみだけど、その値はプログラムが終了するまで残る。
また、初期化しなくても自動的に0に初期化される。

この変数は、関数が以前に呼び出された時の値を覚えておきたい場合に使用される。


◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
オブジェクト指向プログラミングは、データによる複雑さへの対抗手段として登場した。
正しい結果を得るためには、処理とデータを常に一貫して保つ必要があり、そのために使われたテクニックが「抽象データ」。
抽象データとは、データと手続きをまとめたもの。
データとその取り扱い方法をまとめてブラックボックス化できる。
抽象データの利点は、
①変化に強いこと
②処理のイメージがつかみやすいこと

コードの抽象化により、イメージが具象化する。
このようなインテリジェントなデータを「オブジェクト」と呼ぶ。
これが「オブジェクト指向プログラミング」の由来になっている。

●プロトタイプ型とクラス型
抽象化の原則から言えば、同じものが数多く登場する場合にはグループ化してまとめてしまうべき。
このことを、DRY(Don’t Repeat Yourself)原則と呼ぶ。

重複を避けるために同種のオブジェクトをまとめる方法は大きく分けて2つ。
①プロトタイプ型
元になるオブジェクトのコピーを作ることで同種のオブジェクトを作りだす。
プロトタイプとは、ひな型のこと。
JavaScriptもプロトタイプ型。

②鋳型
これは、例えるなら、たい焼きの型とたい焼きの関係。
このたい焼きの型に相当するものをオブジェクト指向プログラミングでは、「クラス」と呼ぶ。
同じ種別のオブジェクトはそれぞれ同じクラスに属し、操作や性質を共有する。

プロトタイプ型と違って、クラス型オブジェクト指向言語は、ひな型となるクラスとひな型から作られたオブジェクトを明確に区別する。
たい焼きの型は、たい焼きではないことと同じように。

クラスと対比し、違いを際立たせるためにオブジェクトのことをしばしば「インスタンス」と呼ぶ。

 

 

 

今回はこれで以上です。

先のことは全く見えていませんが、歩を進めて景色を変えていきたいと思っています。

次回は5/22(金)に更新します。

ではまた!