定形郵便物・定形外郵便物の基本料金は、つぎの表のように定められています。重さから料金を求めようとすると、条件判定の処理をしなければなりません。本稿では、3つのやり方をご紹介します。
定形郵便物
重さ | 料金 |
---|---|
25g以内 | 82円 |
50g以内 | 92円 |
定形外郵便物
重さ | 料金 |
---|---|
50g以内 | 120円 |
100g以内 | 140円 |
150g以内 | 205円 |
250g以内 | 250円 |
500g以内 | 380円 |
1000g以内 | 570円 |
if文を使う
もっとも基本的な条件判定のやり方はif
文を使うことでしょう。また、応用範囲も広い手法です。関数(getPostage())として定めることにします。引数は重さで、戻り値が料金です。1kgを超えると規格外になるので、-1を返すことします。
function getPostage(weight) {
let postage;
if (weight <= 25) {
postage = 82;
} else if (weight <= 50) {
postage = 120;
} else if (weight <= 100) {
postage = 140;
} else if (weight <= 150) {
postage = 205;
} else if (weight <= 250) {
postage = 250;
} else if (weight <= 500) {
postage = 380;
} else if (weight <= 1000) {
postage = 570;
} else {
postage = -1;
}
return postage;
}
処理としてはまったく問題ありません。少し書きづらく、見にくいというのが難点でしょう。
条件演算子を使う
値を代入したり、返したりする判定処理では、条件(三項)演算子? :
を使うとすっきり見やすく書けることが少なくありません。Microsoft ExcelのIF関数と構文の組み立ては同じです。
function getPostage(weight) {
const postage =
(weight <= 25) ? 82 :
(weight <= 50) ? 120 :
(weight <= 100) ? 140 :
(weight <= 150) ? 205 :
(weight <= 250) ? 250 :
(weight <= 500) ? 380 :
(weight <= 1000) ? 570 :
-1;
return postage;
}
コードの条件演算子は入れ子になっています。けれど、書き方をうえのように整えれば、if
文よりも構成がわかりやすいのではないでしょうか。
Array.prototype.find()メソッドを使う
Array.prototype.find()
は、ECMAScript 2015 (ECMAScript 6)から備わった新しいメソッドです。引数に関数を渡すと、その条件に合う要素が得られます。
function getPostage(weight) {
const postageTable = [
{weight: 25, postage: 82},
{weight: 50, postage: 120},
{weight: 100, postage: 140},
{weight: 150, postage: 205},
{weight: 250, postage: 250},
{weight: 500, postage: 380},
{weight: 1000, postage: 570}
];
const adapt = postageTable.find((element) =>
weight <= element.weight
);
return (adapt) ? adapt.postage : -1;
}
料金表が予め配列で示されるので見やすくなります。また、Array.prototype.find()
メソッドは条件を関数で定めるため、複雑な処理が加えやすいのもよい点です。条件に合う要素が見つからない場合は、undefind
が返されます。その判定には条件演算子を用いました。
3つの手法それぞれに、応用範囲の広さ、見やすさ、手の加えやすさなど、異なったよい点があります。場合によって使い分けてみてください。