Improve motivating example for Maybe
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 32/100
- Tipo de issue
- Documentação
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- python
- Domínio
- documentation
Direção de pesquisa
Comece localizando a seção da documentação que contém o exemplo atual de motivação para Maybe; nenhuma arquivo ou teste é indicado na issue. Compare o exemplo com as alternativas em Python mencionadas e esclareça o caso de uso pretendido. A tarefa estará concluída quando a documentação apresentar uma motivação convincente sem tratar retornos ambíguos de None como tratamento comum de erros.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
The current example motivating the use of Maybe is somewhat misleading because it solves a made-up problem:
Alleged original "python" code:
if user is not None:
balance = user.get_balance()
if balance is not None:
credit = balance.credit_amount()
if credit is not None and credit > 0:
discount_program = choose_discount(credit)
Alleged "better" solution using Maybe:
discount_program: Maybe['DiscountProgram'] = Maybe.from_optional(
user,
).bind_optional( # This won't be called if `user is None`
lambda real_user: real_user.get_balance(),
).bind_optional( # This won't be called if `real_user.get_balance()` is None
lambda balance: balance.credit_amount(),
).bind_optional( # And so on!
lambda credit: choose_discount(credit) if credit > 0 else None,
)
Usual python code solving this exact problem:
try:
discount_program = choose_discount(user.get_balance().credit_amount())
except AttributeError:
pass
The example is based on the very bad habit of signaling errors by return values, e.g. returning None.
No sane (python) developer would write a function that returns None in case of an error unless there is good reason for it, it is properly documented and returning None immediately and unambiguously tells the caller what went wrong. When exceptions occur, exceptions should be raised.
For example, credit_amount() returning None conveys no meaning at all. No credit? Credit amount == 0? Credit amount < 0? Raccoons taking over the world?
And even if one had to use flawed 3rd party code like this, there is a shorter and more concise version to handle this without Maybe.
I believe there is a legitimate use case for Maybe, but this is not it.
- Linguagem predominante
- Python
- Estrelas
- 4.4k
- Forks
- 155
- Merge médio
- 2h 2min
- PRs com merge (30d)
- 20
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de dry-python/returns
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
dry-python/returns#2394 · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 52/100
dry-python/returns#2365 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
dry-python/returns#2355 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
dry-python/returns#2295 · 4 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
dry-python/returns#2253 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de dry-python/returns
Issues semelhantes
-
feature:LinkChecker
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
digitalfabrik/integreat-cms#4594 ·
Mantenedores costumam responder em até 5 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
EleutherAI/lm-evaluation-harness#4319 ·
Mantenedores costumam responder em até 1 dia
-
needs triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
json_params_matcher fails on falsy top-level JSON primitives (0, False, "")Talvez já em andamento @mayureshsonawane17 assumiu hoje. AbertaWaiting for: Product Owner
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 5 dias