プログラミングのコツ: コメントを使った効率的なコーディング

エンジニアノート

こんにちは、プログラミングの世界へようこそ!今日は、新人エンジニアの皆さんに、ちょっとしたコツをお教えします。

プログラミングは、ただコードを書くだけではなく、そのプロセスも重要です。

特に複雑なプログラムを作成する際には、計画的なアプローチが求められます。

今回は、効率的にコーディングするための一つの方法、

「まずはおおまかな処理をコメントで書き出してそのコメントを基にコーディングする」というテクニックについてお話しします。

コメントから書くことで処理の順序をまとめやすく、処理の

それでは見ていきましょう

コメントを使ったアプローチ

プログラムを書く前に、まずはどのような処理を行うかをコメントで書き出します。

これにより、プログラムの全体像が明確になりどの部分にどんなコードを書くべきかが分かりやすくなります。

サンプルとして以下のような処理をするプログラムを書いてみることにしましょう。

「名前,国語の点数,算数の点数,理科の点数」がCSV形式で書いてあるファイルがあります。
 ファイルを読み込んでそれぞれの国語と算数と理科の平均点を出だしてください。
 出した平均点を読み込んだファイルの最後の行に
「平均点は,[国語の平均点],[算数の平均点][理科の平均点]」
を追記したファイルを作成してください

文章だけだとどんな処理があってどのような順番で処理を書いていけばいいか想像がつきにくいですよね

まずは最初の処理と最後の処理をイメージしてください。

最初の処理:ファイルを読み込む

最後の処理:ファイルに書き込む

イメージは合ってましたか?

それをそのままコメントに書いてみましょう。

// ファイルを読み込む

// ファイルを書き込む

入口と出口はできました。ここに処理を読み解きながらコメントをさらに追加していこう!!

ワンポイント:

  • 全体の流れを把握する: コメントを使って、プログラム全体の流れを大まかに捉える。この段階では、具体的なコードは書かず、何をするかの「計画」を立てること。
  • セクションごとに分ける: 大きな処理をいくつかの小さなセクションに分け、それぞれに対してコメントを書きます。例えば、「ユーザー入力を受け取る」「結果を計算する」「結果を表示する」など。

もっと細かく処理を書き込んでみましょう

// ファイルを読み込む

// 各行のデータを解析して、各科目の点数を合計に加算する

// 平均点を計算する

// ファイルに「平均点は,[国語の平均点],[算数の平均点][理科の平均点]」を追記する

// ファイルに変更を書き込む

大まかな処理はかけましたでしょうか?

処理のイメージはついてきたでしょうかでもこのままだとまだコードに落とし込むには物足りないですね。

次に意識するのはコメントがそのままコードのコメントとして意味するように書くです。

ではまた追記してみましょう。

// ファイルを読み込む

// 各科目の点数の合計を保持する変数を初期化

// 各行のデータを1つずつ取り出して、各科目の点数を合計に加算する

// 平均点を計算する
// 国語の平均点を求めて変数に入れる
// 算数の平均点を求めて変数に入れる
// 理科の平均点を求めて変数に入れる

// 追記する文字列を格納する変数を初期化する
// [平均点は,]を変数に追記
// [国語の平均点,]を変数に追記
// [算数の平均点,]を変数に追記
// [理科の平均点]を変数に追記

// ファイルの最後に「平均点は,[国語の平均点],[算数の平均点][理科の平均点]」を作成した文字列を追記する

// ファイルに変更を書き込む

具体的になってきましたねどんな構文をイメージできてきたのではないでしょうか?

コメントからコードへ

早速先ほどのコメントを元にコードを書いてみましょう

const fs = require('fs');
const path = require('path');

const filePath = path.join(__dirname, 'scores.txt'); // ファイルパスを設定

try {
  // ファイルを読み込む
  const data = fs.readFileSync(filePath, 'utf8');
  const lines = data.split('\n');

  // 各科目の点数の合計を保持する変数を初期化
  let totalJapanese = 0, totalMath = 0, totalScience = 0;
  let studentCount = 0;

  // 各行のデータを1つずつ取り出して、各科目の点数を合計に加算する
  lines.forEach(line => {
    const scores = line.split(',').map(Number);
    //各科目の点数を合計に加算する
    if (scores.length === 3) {
      totalJapanese += scores[0];
      totalMath += scores[1];
      totalScience += scores[2];
      studentCount++;
    }
  });

  // 平均点を計算する
  // 国語の平均点を求めて変数に入れる
  const averageJapanese = totalJapanese / studentCount;
  // 算数の平均点を求めて変数に入れる
  const averageMath = totalMath / studentCount;
  // 理科の平均点を求めて変数に入れる
  const averageScience = totalScience / studentCount;

  // 追記する文字列を作成
  // [平均点は,]を変数に追記
  // [国語の平均点,]を変数に追記
  // [算数の平均点,]を変数に追記
  // [理科の平均点]を変数に追記
  const averageScoresStr = `平均点は,国語:${averageJapanese.toFixed(2)},算数:${averageMath.toFixed(2)},理科:${averageScience.toFixed(2)}`;

  // ファイルの最後に追記
  fs.appendFileSync(filePath, `\n${averageScoresStr}`);

  console.log('平均点をファイルに追記しました。');
} catch (error) {
  console.error('エラーが発生しました:', error);
}

どこにどう書いたらいいかはコメントを見て実際の処理を一個一個調べて書いていくとわかりやすくなりますよね。

検索エンジンで検索するにしても

「名前,国語の点数,算数の点数,理科の点数」がCSV形式で書いてあるファイルがあります。  ファイルを読み込んでそれぞれの国語と算数と理科の平均点を出だしてください。  出した平均点を読み込んだファイルの最後の行に 「平均点は,[国語の平均点],[算数の平均点][理科の平均点]」を追記したファイルを作成してください

と検索してもヒットしませんが、

各行のデータを1つずつ取り出して、各科目の点数を合計に加算する

だけ抜き出してみると「ファイルの行を1行ずつ取り出す方法」は検索エンジンで検索できるしもし先人の人が見つけた私的なコードを参考できるかもしれません。

※そのままではないかもしれませんが。。

コツ:

  • 一つずつ着実に進める: 各コメントに基づいて一つずつコードを実装していきます。これにより、タスクが小さく、取り組みやすくなります。

まとめ

プログラミングの効率的なアプローチ方法として、

「まずはおおまかな処理をコメントで書き出してそのコメントを基にコーディングする」

というテクニックを紹介しました。

この方法では、プログラムを書く前にコメントを使って処理の全体像を整理し、どの部分にどんなコードを書くべきかを明確していきました。

サンプルとして、「名前,国語の点数,算数の点数,理科の点数」がCSV形式で書かれたファイルから各科目の平均点を計算し、その平均点をファイルの最後に追記するプログラムを考えました。

最初の処理は「ファイルを読み込む」であり、最後の処理は「ファイルに書き込む」です。

これをもとに、各行のデータを解析して各科目の点数を合計に加算し、平均点を計算するといった具体的なステップをコメントに追記していくことでより具体的にイメージできたと思います。

コメントからコードへの移行では、各コメントに基づいて一つずつコードを実装していきます。この段階でコメントがコードのコメントとして意味するようになるため、プログラム全体の流れが理解しやすくなります。

このアプローチ方法をすることでプログラムの作成が段階的で着実に進むため、課題が小さくなり取り組みやすくなります。

ということで。。。

コメントを活用して計画的にアプローチすることで、複雑なプログラムの開発も効率的かつ理解しやすくなります。

新人エンジニアの方々には、このコメントからコードへの手法を通じて、プログラミングのプロセスをよりスムーズに進めていただきたいと思います。

コメント

タイトルとURLをコピーしました