iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
0

包含邊界的極值優先使用 min 與 max

假設有個購物車應用程式只允許使用者一次購買十個商品:

CART_TOO_BIG_LIMIT = 10

if shoppong_cart_.num_items() >=CART_TOO_BIG_LIMIT:
   ERROR("too many items in cart.")

這段程式有典型的邊界錯誤bug,只要將 >= 改為 > 就能夠修正:

if shopping _cart.num_items() > CART_TOO_BIG_LIMIT:

(或是將CART_TOO_BIG_LIMIT重新定應為11),問題根源出於CART_TOO_BIG_LIMIT名稱的誤解,將名稱改為:MAX_ITEMS_IN_CART,看起來簡單又清楚:

MAX_ITEMS_IN_CART = 10
if shopping_cart.num_items() > MAX_ITEMS_IN_CART:
   ERROR("too many items in cart.")

閉區間優先使用 first 與 last

print interger_range(start=2,stop=4)
# 會[2,3]或[2,3,4](或其他及結果)?

start是個合理名稱,stop有多種不同解讀。
這類「閉區間」(包含兩側端點),first/last是不錯的命名方式,除此之外,min/max有可以用於閉區間。

半開放區間優先使用begin與end

例如要列出十月16日所有的事件

PrintEventsInRange("OCT 16 12:00am", "OCT 17 12:00am")

要比

PrintEventsInRange("OCT 16 12:00am", "OCT 16 11:59:59.999pm")

來的簡單的多。
一般慣例用begin/end表示這類包含起始點不含終點的半開放區間。

Reference

  • <<易讀程式之美學-提升程式碼可讀性的簡單法則 >>(The Art of Readable Code)

上一篇
不被誤解的名稱--1
下一篇
不被誤解的名稱--3
系列文
易讀程式之美學30

1 則留言

0
Chris
iT邦新手 5 級 ‧ 2018-10-25 22:08:05

閉區間優先使用 first/end or first/last ??

已修正,改謝告知

我要留言

立即登入留言