Сообщение от
Elrmrnt-Kritik
Где ее лучше оставить, а где все-таки лучше снести?
Оставляй проверку везде, где результат работы функции зависит от значения переменной, которое проверяется в условии.
Если тебя пугает то, что на выполнение условия тратится время, то эти траты ничтожно малы в сравнении с возможными ошибками и багами из-за невалидных данных. А если вдруг какая-то из подобных функций вызывается, например, в цикле или таймере, где действительно важно экономить каждую миллисекунду, лучше просто продублируй нужный код из функции внутри этого таймера/цикла, убрав ненужные проверки. Но убирать проверки внутри самих функций я бы не советовал. Может аукнуться рано или поздно.
Сообщение от
Elrmrnt-Kritik
Попутно так еще одну вещь хотел бы уточнить все по этому же коду. Понятно, что в моей функции IsValidPassword можно было бы обойтись без формата, если бы MIN_LENGTH_PASSWORD и MAX_LENGTH_PASSWORD были макросами. Но я решил это сделать константами. Вообще сейчас все лимиты и значения стараюсь указывать через константы. Что думаете по этому поводу? Лучше переводить на макросы и забыть про format в таких ситуациях?
Как вариант, просто делай макрос + константу, а-ля
PHP код:
#define MSG_MIN_LENGTH_PASSWORD 64
const MIN_LENGTH_PASSWORD = MSG_MIN_LENGTH_PASSWORD;
И уже там, где нужно форматировать текст, используй макрос, а в условиях используй константу.
Правда не уверен, что в этом будет большой смысл, если честно.
Можно ещё придумать какой-нибудь такой костыль с единоразовым форматированием:
PHP код:
static test_message[27+2+1];
if(isnull(test_message))
{
format(test_message, sizeof(test_message), "Минимальный размер пароля: %d", MIN_LENGTH_PASSWORD);
}
SendClientMessage(playerid, -1, test_message);
Только стоит понимать, что такой вариант скушает в два раза больше памяти, так как помимо того, что нужно выделить место под массив, так же и строка в format должна где-то хранится до того, как попадёт в наш массив. В итоге получится, что она продублируется в памяти (один раз без значения макроса, а второй раз, находясь в массиве, со значением).
Это, конечно, не критично, ибо таких ситуаций в SA-MP скриптинге полно. Просто рассказываю, что и у этого варианта есть свои "минусы".
Сообщение от
Elrmrnt-Kritik
Еще вспомнил, что хотел узнать уже давно, но все забывал. Если нужно, пожалуйста, перенесите в отдельную тему. Как вы смотрите на моды, написанные исключительно на C++? Ведь в них идет постоянный вызов нативных функций, что по идее плохо влияет на скорость работы. Но в то же время работа всех функций в C++ идет быстрее. Компенсируется ли быстрота работы кода в C++ вызовом нативных функций из мода?
Само по себе использование С++, Assembler, Lua, Pawn или какого-либо другого ЯП не даёт ничего. Говнокод можно писать на любом языке. Так же, как и для того, чтоб писать хороший код, нужно иметь достаточно знаний.
Ну а вообще, лично я считаю это бессмысленным извращением в любом случае. SA-MP прекрасно работает и с модификациями, написанными на Pawn, поэтому даже если представить, что мод на каком-то другом языке будет работать быстрее, от этого толку будет не очень много.