-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nadużywanie wartości domyślnych parametrów funkcji #3
Comments
Taka drobna meta-uwaga: utworzyłem labele dla poszczególnych narzędzi (python, shell, git, markdown) i części naszego guide'a (coding style, workflow), więc nie trzeba tego pisać w nazwie issue. Korzystajmy z tych labeli. |
Jeśli ktoś definiuje |
Hehe :), no ten przykład jest na tyle ekstremalny że można by go uznać za buga. Ale ogólnie moim zdaniem jest wiele mniej oczywistych sytuacji i istnieje tendencja by na siłę dawać domyślną wartość dla wygody. Według mnie reguła powinna mówić, że unikamy nadawania wartości domyślnej tylko dlatego, że jakaś wartość parametru jest częściej używana niż inna i nie chce nam się jej ciągle pisać. Nadajemy je raczej w sytuacjach gdy dany parametr jest po prostu opcjonalny. Stąd też wynika to zalecenie, które już tam jest - żeby unikać wartości domyślnych innych niż pusty string czy |
👍 z tym że
Nie znalazłem ani jednej. |
@rwrzesien , nie dokładnie takich funkcji, ale tego typu ;) Żeby nie szukać daleko: def update_subtask(
subtask: Subtask,
state: Subtask.SubtaskState,
next_deadline: int = None,
set_next_deadline: bool = False,
task_to_compute: message.TaskToCompute = None,
report_computed_task: message.ReportComputedTask = None,
ack_report_computed_task: message.AckReportComputedTask = None,
reject_report_computed_task: message.RejectReportComputedTask = None,
subtask_results_accepted: message.tasks.SubtaskResultsAccepted = None,
subtask_results_rejected: message.tasks.SubtaskResultsRejected = None,
):
"""
Validates and updates subtask and its data.
Stores related messages in StoredMessage table and adds relation to newly created subtask.
"""
assert isinstance(subtask, Subtask)
assert state in Subtask.SubtaskState
assert (state in Subtask.ACTIVE_STATES) == (next_deadline is not None)
assert (state in Subtask.PASSIVE_STATES) == (next_deadline is None)
Podobnie: def store_or_update_subtask(
task_id: str,
subtask_id: str,
provider_public_key: bytes,
requestor_public_key: bytes,
state: Subtask.SubtaskState,
next_deadline: int = None,
set_next_deadline: bool = False,
task_to_compute: message.TaskToCompute = None,
report_computed_task: message.ReportComputedTask = None,
ack_report_computed_task: message.AckReportComputedTask = None,
reject_report_computed_task: message.RejectReportComputedTask = None,
subtask_results_accepted: message.tasks.SubtaskResultsAccepted = None,
subtask_results_rejected: message.tasks.SubtaskResultsRejected = None,
): Messsage są zadeklarowane jako obiekty odpowiednich klas, a przypisywana jest im wartość domyślna Wniosek: Nie korzystamy w kodzie z adnotacji EDIT: A dokłądnie takie widziałem w niektórych naszych concentowych PR-ach ;) |
Kolejnym przykładem na nadużywanie wartości domyślnych jest funkcja: def store_pending_message(
response_type = None,
client_public_key = None,
queue = None,
subtask = None,
payment_message = None,
): Wszystkie jej argumenty są domyślnie |
Ok, propozycja do wiki:
|
@dybi 👍
|
The text was updated successfully, but these errors were encountered: