LINUX.ORG.RU

История изменений

Исправление Psych218, (текущая версия) :

И я хочу реализовать что-то типа service.change_status.active()

А почему не service.change_status(«active»), что было бы логичнее? (Вместо строки можно использовать и константу ACTIVE, суть не в этом).

Просто у тебя получается (даже синтактически), что change_status — это не функция, функция — active(). А change_status — некий объект, который этот набор функций хранит. Это (то, что ты хочешь, судя по желаемому синтаксису) делается так. Просто создай ещё один класс StatusChanger с этими функциями в нём. Но это довольно странно выглядит, непривычный вид API. Change по сути не является методом, а имя говорит обратное, а active, слово, которое «интуитивно» воспринимается не как метод, а как состояние, как раз является функцией. Всё наоборот. change_status можно сделать функцией, возвращающей объект с методами active() и остальными, конечно. Но тогда будет не как ты написал, а service.change_status().active()

Всё же гораздо логичнее будет, если change_status у тебя будет как раз функцией, которая в качестве аргументов принимает статусы, то есть service.change_status(active). Такой код гораздо понятнее и привычнее. Вот она функция, и вот она принимает аргумент. Ну статусами могут быть тоже функции, если хочется (ты можешь сделать active функцией) тогда change_status будет выполнять свой какой-то код и вызывать ещё одну функцию, но такой вид смотрится явно логичнее, чем service.change_status.active()

Просто когда кто-то, кто пользуется этим твоим классом, видит имя change_status, он наверняка предположит, что это функция, которая меняет статус. И всё. Не возвращает функцию, а меняет. Она же change_status, а не get_status_change_functions какая-нибудь. Логично предположить, что она выполняет смену статуса и возвращает успешность сего действа, или ничего, или сам статус, но никак не функцию, которая на самом деле меняет статус, но называется словом active, то есть именем статуса. Ты просто делаешь лишнюю сущность там, где она не нужна. По сути просто излишнее запутывание кода, ничего больше.

Исправление Psych218, :

И я хочу реализовать что-то типа service.change_status.active()

А почему не service.change_status(«active»), что было бы логичнее? (Вместо строки можно использовать и константу ACTIVE, суть не в этом).

Просто у тебя получается (даже синтактически), что change_status — это не функция, функция — active(). А change_status — некий объект, который этот набор функций хранит. Это (то, что ты хочешь, судя по желаемому синтаксису) делается так. Просто создай ещё один класс StatusChanger с этими функциями в нём. Но это довольно странно выглядит, непривычный вид API. Change по сути не является методом, а имя говорит обратное, а active, слово, которое «интуитивно» воспринимается не как метод, а как состояние, как раз является функцией. Всё наоборот. change_status можно сделать функцией, возвращающей объект с методами active() и остальными, конечно. Но тогда будет не как ты написал, а service.change_status().active()

Всё же гораздо логичнее будет, если change_status у тебя будет как раз функцией, которая в качестве аргументов принимает статусы, то есть service.change_status(active). Такой код гораздо понятнее и привычнее. Вот она функция, и вот она принимает аргумент. Ну статусами могут быть тоже функции, если хочется (ты можешь сделать active функцией) тогда change_status будет выполнять свой какой-то код и вызывать ещё одну функцию, но такой вид смотрится явно логичнее, чем service.change_status.active()

Просто когда кто-то, кто пользуется этим твоим классом, видит имя change_status, он наверняка предположит, что это функция, которая меняет статус. И всё. Не возвращает функцию, а меняет. Она же change_status, а не get_status_change_functions какая-нибудь. Логично предположить, что она выполняет смену статуса и возвращает успешность сего действа, или ничего, или сам статус, но никак не функцию, которая на самом деле меняет статус, но называется словом active, то есть именем статуса. Ты просто делаешь лишнюю сущность там, где она не нужна.

Исходная версия Psych218, :

И я хочу реализовать что-то типа service.change_status.active()

А почему не service.change_status(«active»), что было бы логичнее? (Вместо строки можно использовать и константу ACTIVE, суть не в этом).

Просто у тебя получается (даже синтактически), что change_status — это не функция, функция — active(). А change_status — некий объект, который этот набор функций хранит. Это (то, что ты хочешь, судя по желаемому синтаксису) делается так. Просто создай ещё один класс StatusChanger с этими функциями в нём. Но это довольно странно выглядит, непривычный вид API. Change по сути не является методом, а имя говорит обратное, а active, слово, которое «интуитивно» воспринимается не как метод, а как состояние, как раз является функцией. Всё наоборот. change_status можно сделать функцией, возвращающей объект с методами active() и остальными, конечно. Но тогда будет не как ты написал, а service.change_status().active()

Всё же гораздо логичнее будет, если change_status у тебя будет как раз функцией, которая в качестве аргументов принимает статусы, то есть service.change_status(active). Такой код гораздо понятнее и привычнее. Вот она функция, и вот она принимает аргумент. Ну статусами могут быть тоже функции, если хочется (ты можешь сделать active функцией) тогда change_status будет выполнять свой какой-то код и вызывать ещё одну функцию, но такой вид смотрится явно логичнее, чем service.change_status.active()