Сегодня я ожидал платежа в своем кошельке. Баланс был 0. Я запаниковал.

TL;DR: Null не равно 0. Error не равно 0. просто 0 равно 0.

Проблемы

  • Нули
  • UX
  • Удобство использования

Решения

  1. Сделайте четкое различие между нулем и ошибкой.

Контекст

Я много читал о проблемах безопасности.

Особенно на крипте.

На прошлой неделе я прочитал о треде о взломе криптовалюты.

Когда мой кошелек показал мне 0 в качестве баланса, я запаниковал.

Это был просто запах UX.

Блокчейн был недоступен 💩

Образец кода

Неправильный

"""
Below code is automatically generated by code-davinci-002 on GTP3 Codex
1. check balance with blokchain
2. If blockchain is unreachable show 0 as the balance
"""
import requests
import json
def get_balance(address):
    url = "https://blockchain.info/q/addressbalance/" + address
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return 0

Верно

"""
Below code is automatically generated by code-davinci-002 on GTP3 Codex
1. check balance with blockchain
2. If blockchain is unreachable throw an error
"""
import requests
import json
def get_balance(address):
    url = "https://blockchain.info/q/addressbalance/" + address
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        raise BlockchainNotReachableError("Error reaching blockchain")

Обнаружение

[Х] Руководство

Это дизайнерский запах.

Мы можем найти закономерности, когда выбрасывается исключение или код возврата и маскируется 0.

Теги

  • UX

Заключение

Всегда руководствуйтесь принципом наименьшего удивления.

связи









Больше информации



Кредит

Фото Jasmin Sessler на Unsplash

Отказ от ответственности

Code Smells — это всего лишь мое мнение.

Моя реальная критика Null заключается в том, что он снова возвращает ненужную агонию, связанную с необходимостью выбирать, выполнять ли вашу программу быстро без проверки или медленно с проверкой.

Тони Хоар (нулевой изобретатель)



Эта статья является частью серии CodeSmell.