1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

郵便料金の条件判定を3つのやり方で試してみる

Last updated at Posted at 2018-03-16

定形郵便物・定形外郵便物の基本料金は、つぎの表のように定められています。重さから料金を求めようとすると、条件判定の処理をしなければなりません。本稿では、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つの手法それぞれに、応用範囲の広さ、見やすさ、手の加えやすさなど、異なったよい点があります。場合によって使い分けてみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?