[増補改訂]良いコードを書く技術 ──読みやすく保守しやすいプログラミング作法

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

本書のサンプルコードは以下のページで公開しています。

(2022年7月1日更新)

お詫びと訂正(正誤表)

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2022年7月1日最終更新)

以下,第1刷までの内容に対する訂正となります。

P.34 表3.2の4行目

genarate
generate

P.52 下から2行目

Arrays.asList(new String[] {"blue", "red", "green"});
new ArrayList<>(Arrays.asList("blue", "red", "green"));

P.53 2つ目のコード

public class Colors {
    // Collections#unmodifiableListメソッドを使って
    // 変更不可能なListを作成
    public static final List<String> BASIC_COLORS =
        Collections.unmodifiableList(
          Arrays.asList(new String[] {"blue", "red", "green"}));
}
public class Colors {
    // List#ofメソッドを使って
    // 変更不可能なListを作成
    public static final List<String> BASIC_COLORS =
        List.of("blue", "red", "green"));
}

P.82 6行目

private Document buildDocument() throws Exception {
public Document buildDocument() throws Exception {

P.109 コードの3行目

interface Person = {
interface Person {

P.114 14行目

const time = timeReservation[i].time;
const time = timeReservation.time;

P.117 リスト7.5

...
// ❶ユニークな日付の配列を作成
const buildDates = (reservations) => {
  const dates = [];
  for (r of reservations) {
    if (!dates.includes(r.date)) {
      dates.push(r.date);
    }
  }
  return dates;
};

// ❷時間ごとの予約データの配列を作成
const buildTimeSlots = (reservations) => {
  const timeSlots = [];
  const times = [];
  for (timeReservation of reservations) {
    if (!times.includes(timeReservation.time) {
      // 対象時間のすべての日付の予約データの配列を作成
      const dateReservations = reservations.filter((r) => {
        return r.time == timeReservation.time;
      });
      const timeSlot = {
        time: r.time,
        dateReservations: dateReservations,
      };
      timeSlots.push(timeSlot);
      times.push(r.time);
    }
  }
  return timeSlots;
};
...
...
// ❶ユニークな日付の配列を作成
const buildDates = (reservations) => {
  const dates = [];
  for (const r of reservations) {
    if (!dates.includes(r.date)) {
      dates.push(r.date);
    }
  }
  return dates;
};

// ❷時間ごとの予約データの配列を作成
const buildTimeSlots = (reservations) => {
  const timeSlots = [];
  const times = [];
  for (const timeReservation of reservations) {
    if (!times.includes(timeReservation.time)) {
      // 対象時間のすべての日付の予約データの配列を作成
      const dateReservations = reservations.filter((r) => {
        return r.time == timeReservation.time;
      });
      const timeSlot = {
        time: timeReservation.time,
        dateReservations: dateReservations,
      };
      timeSlots.push(timeSlot);
      times.push(timeReservation.time);
    }
  }
  return timeSlots;
};
...

P.118 リスト7.6

...
// ❶データ構造を変換
const dates = buildDates(reservations);
const timeSlots = buildTimeSlots(reservations);

console.log('<table>');

// ❷1行目(日付の行を出力)
console.log('<tr>');
console.log('<th>日付</th>');
for (const date of dates) {
    console.log(`<th>${date}</th>`);
});

// ❸2行目以降(時間ごとの予約状況の行を出力)
for (const timeSlot of timeSlots) {
    console.log('<tr>');
    console.log(`<td>${time}</td>`);
    for (r of timeSlot.dateReservations) {
      console.log(`<td>${r.count}/${r.limit}</td>`);
    }
    console.log('</tr>');
});

console.log('</table>');
...
// ❶データ構造を変換
const dates = buildDates(reservations);
const timeSlots = buildTimeSlots(reservations);

console.log('<table>');

// ❷1行目(日付の行を出力)
console.log('<tr>');
console.log('<th>日付</th>');
for (const date of dates) {
    console.log(`<th>${date}</th>`);
}

// ❸2行目以降(時間ごとの予約状況の行を出力)
for (const timeSlot of timeSlots) {
    console.log('<tr>');
    console.log(`<td>${time}</td>`);
    for (const r of timeSlot.dateReservations) {
      console.log(`<td>${r.count}/${r.limit}</td>`);
    }
    console.log('</tr>');
}

console.log('</table>');

P.187 8行目
P.188 コードの1行目
P.190 下から13行目
P.194 リスト11.9の6行目

Map<String, Object> record = new HashMap<String, Object>();
Map<String, Object> record = new HashMap<>();

P.192 リスト11.6の3行目

return StringUtils.trim(value.toString());
return value.toString().trim();

(以下2021年4月28日更新分)

P.50 リスト4.aの2~4行目(2022年7月1日修正)

int total = 0;
for (int i = 1; i < 10; i++) {
    int n = i * i;
    total += n;
}
alert(total);
var total = 0;
for (var i = 1; i < 10; i++) {
    var n = i * i;
    total += n;
}
alert(total);

P.50 リスト4.bの2行目

int total, i, n;
var total, i, n;