皆さん､ こんにちは｡
お帰りなさい｡
今回が最終講義となります｡
これがコースの概要です｡
というわけで､ 最後になってしまいました｡
ラッピングしているところです｡
授業で習ったことをすべて思い出してほしい｡
もし授業が終わるまでに時間がかかった場合は､
ここで重要なコンセプトを思い出してください｡
そこで､ コードブロックのすべてを学びました｡
Code blocksは､ 当社の統合開発環境です｡
cプログラムを編集することができるのです｡
cプログラムを実行することができるのです｡
また､ C言語プログラムのデバッグも可能です｡
デバッグは重要で､ 私たちのエラーを発見し､ 修正するのに役立ちます｡
だから､ プログラムを書くのに使える､ とても便利なツールができたんだ｡
コードブロックは､ グラフィカルな使用インターフェースが気に入っています｡
使い勝手がよく､ とても使いやすいですね｡
また､ cの基本的な演算子についても説明しました｡
論理演算子､ 算術演算子､ 代入演算子､
関係演算子などである｡
論理演算子は､ アンパサンドやオルドのようなものです｡
情報の比較 算術演算子 プラス マイナス
掛け算 などの演算ができます｡
そして､ データを変数に代入する重要な代入演算子｡
条件文の話をしました｡
ここで､ プログラムにおける意思決定が行われます｡
ここで､ もうシーケンシャルではなくなってしまうんですね｡
ブロックから飛び出してしまうかもしれません｡
質問に対する答え､ trueと評価されるかfalseと評価されるかによって異なるコードを実行することがあります｡
そこで､ ブール評価やブール式についても学びました｡
具体的にはif文について学びました｡
ネストされたif文の使い方 ネストされたor else文の使い方｡
switch文は､ 定数や変数を比較するときに使うと非常に便利だという話をしました｡
スイッチを使えば､ if else文の多くを排除することができます｡
スイッチの方が効率的でもあります｡
switchを使うとき､ 特定のケースから飛び出すためにbreakを使わなければならないという話をしましたが､
プログラムの中で意思決定をする上で､ 多くの良い情報があります｡
コードの繰り返しについてお話しましたが､ これはif文と同じように制御の流れに関係するものです｡
1つのコード行を何度も実行することができます｡
もはやシーケンスコーディングではないのですね｡
つまり､ これらはループ構造になっているのです｡
これらは､ for､ while､ do whileなどの言語で使用できるさまざまなキーワードです｡
forとwhileは非常によく似ています｡
しばらくするとできるようになる前のことが､ かなりできるようになります｡
いわゆるプレテスト・ループです｡
ループの本体を1回だけ実行することも､ 何度も実行することも､
ゼロ回実行することもできます｡
do whileループは､ テスト後のループであるため､
特に異なる｡
チェックする条件は､ ループの一番下にあります｡
つまり､ 必ず最低1回はそのループを実行することになるわけです｡
プログラムの中で自分のコードを繰り返すことができるのは､ とてもとても便利なことです｡
また､ アレイの話もしました｡
もうひとつ､ とても重要なコンセプトがあります｡
配列は､ データ型に基づいてデータをグループ化することができます｡
つまり､ int型の変数を10個作る代わりに､ intという名前を1つ作れば､ 10個の要素を格納することができるのです｡
つまり､ 配列は角括弧を使った特別な構文になっているのです｡
サイズを特定するのです｡
初期データを配列に設定する方法があります｡
また､ 多次元配列の話もしましたが､ これは基本的に行列や表計算ソフトのことです｡
行と列を含む配列です｡
続いて､ 機能の話に移りました｡
C言語はモジュール言語である｡
C言語は関数を中心に構成されています｡
関数は､ 重複するコードを減らすための方法です｡
何かの名前を呼び出すと､ その名前に実行したいコード群を含めることができます｡
関数の構文について､ 関数からデータを返す方法､ 関数にデータを渡す方法など､
すべてを学びました｡
そこで､ 値による呼び出しと参照による呼び出し､ 引数とパラメータ､
関数プロトタイプをファイルの先頭で宣言することの有用性などを学びました｡
デバッグの話をしました｡
デバッグは非常に貴重で､ まさに問題解決のテクニックです｡
問題解決能力が高くなる｡
そして､ コードを書くときには､ 問題解決は必須のスキルです｡
例えば､ コールスタックでは､ プログラムがクラッシュしたときに､
どの関数が呼び出されたかによって､ どこでクラッシュしたかを特定することができるのです｡
変数の初期化をしていないとか､ セミコロンがないとか､ ブラケットがないとか､
cコードによくある間違いについてお話しました｡
そして､ その後にコンパイラーメッセージを理解するようにします｡
よくある間違いが理解できるかもしれません｡
しかし､ コンパイラーとコンパイラーの言っていることが理解できないと､
デバッグは本当に大変です｡
そこで､ コンパイラが教えてくれる具体的なエラーと､ そのエラーの解釈方法についてお話しました｡
構造体に移行しました｡
構造体は大きな重要な概念です｡
配列と似ていますが､ 構造体は異なるデータ型を持つ特定の要素を特定の名前にまとめることができるため､
さらに強力です｡
そこで､ 時間､ 分､ 秒､ 年などの日付を格納できるtime
and day構造体などを例に挙げました｡
しかし､ 構造体はstrikeキーワードを使うのが最適です｡
異なる変数や異なる型をグループ化し､ プログラム内で参照することができます｡
まるで､ 別のデータ型を定義しているようなものです｡
ドラッグを初期化する方法には､ 特定の構文があります｡
また､ 巣の構造についても話をしました｡
構造物を含む構造物｡
ポインタと構造体の使い分けについてお話しました｡
そして､ 議論した文字列｡
文字列は基本的に文字の配列です｡
これらの異なる文字列に対して､ さまざまな操作を行うことができます｡
文字列を介したさまざまな操作機能｡
h.
これらの異なる文字列の基本についてお話しました｡
そして､ 講座のポインターの中で最も重要な概念です｡
そして､ このコースの中で最も難しい概念です｡
しかし､ 非常に有用な概念です｡
ポインターを理解することが重要です｡
ポインターは､ 基本的にアドレスを格納する変数です｡
ポインターを使用すると､ 実行時に動的にメモリを確保することができます｡
ポインターは本来､ 自分のメモリーを管理・操作できるようにするものです｡
cには､ 他の多くの言語にあるようなガベージコレクタは存在しないのです｡
アスタリスク構文を使って独自のポインタを定義し､
使用する方法を学びました｡
また､ 関数にポインタを渡す方法を学びましたが､ これによって実質的に参照渡しを行うことができるようになりました｡
ポインタと配列の話をしました｡
文字ポインタの本質は､ 文字列､ 文字配列とその類似性であることをお話しました｡
また､ ポインタ演算についても説明しましたが､
これは表記上とても優れていて､ さまざまな場所やメモリを非常に高速かつ便利に通過することができます｡
書くコードの量を減らすことができます｡
しかし､ ポインターは､ このコースで最も重要な概念であり､
本当に､ 本当に勉強しなければなりません｡
cではポインタがかなり乱用される傾向があります｡
メモリが適切に確保されていないか､ メモリが解放されていないか､
間違ったメモリアドレスを指していないか､ 配列の境界やメモリ位置の境界を外れていないか､
などです｡
ほとんどの重要なCプログラムは､ 実際にはすべての重要なCプログラムは､ ポインタを含むことになります｡
プリプロセッサについては､ たいしたことはありませんが､ 定数の定義や､ c標準ライブラリで提供されるコードを再利用できるように､
他のヘッダファイルをインクルードするためのincludeディレクティブの使用についての情報を学びました｡
また､ 自分が書いた関数を再利用したい場合は､ 自分でインクルードファイルを作成します｡
入力と出力｡
具体的には､ プログラム中のコマンドライン引数を読み取ったり､ キーボードから読み取るscanfやコンソールに出力を表示するprintfを利用したりすることであった｡
Printfはデバッグに使うのに最適です｡
Scanfはユーザーからの入力を読み取るのに適しています｡
ほとんどのプログラムは､ ユーザーにデータの提供を求めます｡
だからscanfはその方法なんだ｡
そして､ コマンドラインからプログラムへデータを渡すコマンドライン引数｡
これは､ ファイルの入出力と密接な関係があります｡
ファイルの読み書きの方法を学びました｡
ファイルによって､ 永続的なデータを保存することができます｡
最も重要なプログラムとあなたが多くのデータを格納する必要があり､ コンピュータを再起動するときにそこに持っている必要があります参照してください｡
これは､ ファイルの書き込みとファイルからの読み出しを行うものです｡
そして､ 標準のlibヘッダーが提供する重要な関数､ fgetc､
fgetsによる文字列の書き込み､ 文字の書き込み､ それからfprintfやfscanfといったファイルフォーマット関数､
とても､ とても素晴らしい関数についてたくさん学ぶことが出来ました｡
標準cライブラリについて､ 主に文字列操作の文字列関数について学びました｡
しかし､ 演算に使う数学関数､ 環境変数の取得やプログラムの終了に使うユーティリティ関数､
それからlimitなどほとんどのプログラムで使われている標準的なヘッダーファイルについても説明しました｡
hなど､ 素敵なものがあります｡
そして､ 講座の成果､ cに関して今理解しておくべきことです｡
初級のcプログラムを書けるようになること｡
もし､ このクラスの終わりに､ すべてを勉強した上で､ 初心者向けのcプログラムを書けないのなら､
私は講師として失格です｡
もう､ 基本的なプログラムを書くことは､ 当たり前のようになっているのではないでしょうか｡
しかし､ プログラミングの場合は､ すべて練習が必要です｡
練習して､ コードをたくさん書いて､ やっていくうちにどんどん良くなっていくんです｡
質の高いcで効率よく書けるようになったんですね｡
コース全体を通して､ 質の高いコードにこだわるようにしました｡
そして､ このことが意味するのは､ コードをより簡単にメンテナンスできるようにすること､ バグを見つけやすく､
修正しやすくすることです｡
お客様にプログラムを公開すると､ そのプログラムは5年､ 10年と世に出るかもしれません｡
新機能を追加してもよい｡
バグを修正する必要がある｡
それで､ コードを高品質にしたいのです｡
この意味は､ あなたのコードはモジュールであるべきだということです｡
機能を中心に整理する必要があります｡
機能には一貫性が必要です｡
一本筋が通っているはずです｡
10種類のことをやってはいけないのです｡
1000行のコードが入った関数を持つべきではありません｡
入力を読む関数があれば､ 入力を読ませ､ プリント出力をさせず､
いろいろなことをさせる｡
モジュラー・プログラミングはとてもとても重要です｡
そして幸運なことにcは機能を中心に構成されており､ これをサポートしています｡
プログラムは低結合にしたい｡
これはどういうことかというと､ 依存関係があまりないのです｡
グローバル変数の使用に依存していないか､ グローバル変数を使用している関数がないか｡
カップリングは､ 依存関係が強ければ強いほど､ どこでエラーが発生してもおかしくないので､
プログラムのデバッグが難しくなります｡
カップリングを限定すれば､ それらのエラーを簡単に切り分けることができます｡
また､ カップリングは､ グローバルなデータで連携しすぎている関数という形になることもあります｡
また､ 他のヘッダーファイルなどでの依存関係も増える可能性があります｡
そして､ 実装で質の高いcコードを書くことに加えて､ 読みやすいコードにすることも大切です｡
そして､ これはどういうことかというと､ 良い命名規則ができたということです｡
変数を作成する場合､ x1やp1という名前で変数を作成しないで､
意味のある名前を使用してください｡
実際に変数に格納されているものは？
社員IDに関するデータを格納するのであれば､ 社員IDを変数名として作成します｡
2つの数字を足す関数を作るなら､
関数名をaddとする｡ 常識的なタイプのものは､ プログラムをより読みやすくし､
これもまた､ コードを理解しやすくする｡
意味のある命名規則を使用することに加え､ コードのブロックにはインデント（字下げ）を施したい｡
プログラムをより分かりやすくするためです｡
もし､ すべてのコードが改行もなく､ インデントもないただの行の集まりだったら､
本当についていけなくなりますよね｡
だから､ インデントを使い､ 改行でスペースを使う｡
また､ このコースの終わりには､ デバッグができるようになり､ より良い問題解決者になっています｡
デバッガとコードブロックの使い方を理解している｡
コンパイラのメッセージを理解し､ プログラマーにとって不可欠な必須スキルである問題解決とデバッグ､
自分のエラーを発見し修正することです｡
また､ printf文も同様にエラーを見つけるために使用することができます｡
これで､ cプログラム言語の基本的な部分が理解できたはずです｡
この講義で話したこと､ そしてコース中のすべての講義で話したことのすべてです｡
それで､ 私が言いたいのは､ 「おめでとう」ということです｡
自分に誇りを持つこと｡
c言語は､ 主にポインタとそのメモリ管理の柔軟性のために､
学ぶのが簡単なプログラミング言語ではありません｡
だから､ 自分をほめてあげないといけない｡
よく頑張ったね｡
コースは無事終了し､ 難しいプログラミング言語について多くを学びましたね｡
これは､ 長期的にはより良いプログラマーになるために役立つことでしょう｡
多くの言語がcをベースにしているので､ 他の言語を簡単に学ぶことができるようになります｡
だから､ 自分に誇りを持つこと｡
コードを書けるようになったという点で､ 自信につながったのではないでしょうか｡
ロケットサイエンスでなくてもプログラマーになることはできますし､
この授業や仕上げたことが役に立ったのであれば幸いです｡
また､ 評価や建設的な批評など､
遠慮なく質問してください｡
ですから､ コース全体を通したから､ 講義を全部聞いたからと言って､
他のプログラムを書いているときや､ 他の概念で困っているときに､
私に助けを求めてはいけないということではありません｡
フィードバックを送ったり､ 質問をしたり､ 私は常にコースを改善したいと考えています｡
また､ それに関しても､ もしかしたらコンセプトの1つが十分に説明されていなかったかもしれないと思うのであれば､
教えていただければ､ もう少し講義を書いたり､ 改善するように努めます｡
常にコースの改良を考えています｡
授業を通してコースのアップデートを行い､ 改善していきますので､
フィードバックは重要です｡
そして最後になりますが､ コースに申し込んでいただいたことに感謝します｡
私にとっては､ とても意味のあることで､ これに力を注いでいます｡
それで､ コースに申し込んでくれたことに感謝します｡
そして改めて､ 多くのことを学んでいただけたのではと思います｡
でも､ 自分をほめてあげてください､ ありがとうございました｡
頑張ってください｡