0
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.

コンビニの年齢認証パネルのやりとりを実装して納得してみる

Posted at

定期的に話題になるコンビニの年齢認証パネル。

年齢確認タッチパネルを拒み続ける「大人」たち トラブル経験のコンビニは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()の実施だが、時間がかかるので、別の問題が発生しそう。
入場時認証などで、会計前に認証済みになっているので一番いいかも。

結論

みなさん大人しく押しましょう。
特別扱いはめんどくさいのです。

0
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
0
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?