定期的に話題になるコンビニの年齢認証パネル。
年齢確認タッチパネルを拒み続ける「大人」たち トラブル経験のコンビニは2割弱も
それっぽく実装して納得してみよう。
年齢認証パネルがない時
function cashierOperation(items, guest) {
// 商品の合計を計算しつつ、酒類の商品をチェックする
let total = 0
let alcoholic = false
items.forEach(item => {
total += item.price
if (item.alcoholic) {
alcoholic = true
}
})
// 酒類があった時の処理
if (alcoholic) {
// 見た目で確認してみる。this(店員)の力量が試される
const checked = checkaApearance(guest)
if (checked < 20) {
// 20歳未満と判定されれば身分証を見せてもらう
// 同期処理で5分ぐらいかかる
const id = guest.getId()
if (!id) {
// 身分証を持ってなければ売らないで終了
return false
}
} else {
// ここにきた時に、実は未成年の場合非常にまずい
}
}
return true
}
年齢認証パネルがある時
function cashierOperation(items, guest) {
// 商品の合計を計算しつつ、酒類の商品をチェックする
let total = 0
let alcoholic = false
items.forEach(item => {
total += item.price
if (item.alcoholic) {
alcoholic = true
}
})
// 酒類があった時の処理
if (alcoholic) {
// 年齢認証パネルでお客さんに年齢を提示してもらう
const checked = guest.isAdult()
if (!checked) {
return false
} else {
// ここに来た時に実は未成年だったとしても、お客さんが嘘ついたので、
// 仕方ないのではないか
}
}
return true
}
比較
個人的には、処理が単純になっているし、嘘をつく必要もないので、年齢認証パネル対応は賛成。
トラブルになるケースは、guest.isAdult()
で、俺が未成年に見えるか Exeption
が飛んでくるようなもの。
わざわざキャッチしたくない。
しかも、例外を飛ばしてくるのは、具象クラスなので、把握しきれない。guest instanceof 山田太郎
みたいな判定が増えていく事になる。
理想は、全ケースguest.getId()
の実施だが、時間がかかるので、別の問題が発生しそう。
入場時認証などで、会計前に認証済みになっているので一番いいかも。
結論
みなさん大人しく押しましょう。
特別扱いはめんどくさいのです。