-
Улучшение структуры кода
Часто замечаю код примерно такого вида:
Код:
#define MAX_HOUSES 1000
function_name(value)
{
for(new i = MAX_HOUSES; i != 0; --i)
{
if(i == value)
{
strmid(gHouse[i][hOwner], "none", 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
new string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1];
format(string, sizeof(string), "UPDATE `houses` SET `owner` = '%s' WHERE `id` = '%d' LIMIT 1", gHouse[i][hOwner], i);
mysql_tquery(dbHandle, string, "", "");
}
return 1;
}
}
Однако, сам пишу код следующего вида:
Код:
#define MAX_HOUSES 1000
function_name(value)
{
for(new i = MAX_HOUSES; i != 0; --i)
{
if(i != value)
continue;
strmid(gHouse[i][hOwner], "none", 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
new string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1];
format(string, sizeof(string), "UPDATE `houses` SET `owner` = '%s' WHERE `id` = '%d' LIMIT 1", gHouse[i][hOwner], i);
mysql_tquery(dbHandle, string, "", "");
}
return 1;
}
[hr]
Я считаю, что гораздо удобнее в начале задать условия выхода из данной итерации. Их сразу будет видно. Плюс к этому я обошелся без лишних скобок. Но все же интересно узнать, как будет лучше (я так на более простом примере сравнивал, в принципе, по скорости работы разницы нет). И да, приложил код, который бы реализовывал и в своем моде. В некотором роде специально, вдруг что предложить сможете по данной реализации :blush2: (функцию, например, какую-нибудь другую посоветуете вместо strmid, либо иначе объявить максимальное количество домов).
Заранее большое спасибо)
-
Если говорить про скорбки и условие - разницы существенной нет. Если говорить в целом о коде, то первый вариант не совсем рабочий, ибо return стоит в теле цикла и обработка кода оборвется на первой итерации.
И скобки в данном случае не лишние. Они вообще не могут быть лишними, если по предназначению используются :)
Касаемо предложений. Убери инициализацию массива
PHP код:
new string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1];
из цикла. Зачем каждую итерацию по новой создавать и удалять массив?
-
PHP код:
function_name(value)
{
if (!(0 <= value < MAX_HOUSES)) {
return 0;
}
strcpy(gHouse[value][hOwner], "none", MAX_PLAYER_NAME);
new string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1];
format(string, sizeof(string), "UPDATE `houses` SET `owner` = '%s' WHERE `id` = '%d' LIMIT 1", gHouse[value][hOwner], i);
mysql_tquery(dbHandle, string, "", "");
return 1;
}
stock strcpy(dest[], src[], const size = sizeof(dest))
{
dest[0] = '\0';
return strcat(dest, src, size);
}
strcpy не обязателен, но раз попросил.