Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±

    Улучшение структуры кода

    Часто замечаю код примерно такого вида:
    Код:
    #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]
    Я считаю, что гораздо удобнее в начале задать условия выхода из данной итерации. Их сразу будет видно. Плюс к этому я обошелся без лишних скобок. Но все же интересно узнать, как будет лучше (я так на более простом примере сравнивал, в принципе, по скорости работы разницы нет). И да, приложил код, который бы реализовывал и в своем моде. В некотором роде специально, вдруг что предложить сможете по данной реализации (функцию, например, какую-нибудь другую посоветуете вместо strmid, либо иначе объявить максимальное количество домов).

    Заранее большое спасибо)

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если говорить про скорбки и условие - разницы существенной нет. Если говорить в целом о коде, то первый вариант не совсем рабочий, ибо return стоит в теле цикла и обработка кода оборвется на первой итерации.
    И скобки в данном случае не лишние. Они вообще не могут быть лишними, если по предназначению используются :)

    Касаемо предложений. Убери инициализацию массива
    PHP код:
    new string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1]; 
    из цикла. Зачем каждую итерацию по новой создавать и удалять массив?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    PHP код:
    function_name(value)
    {
        if (!(
    <= value MAX_HOUSES)) {
            return 
    0;
        }
        
    strcpy(gHouse[value][hOwner], "none"MAX_PLAYER_NAME);
        new 
    string[60+(-2+MAX_PLAYER_NAME)+(-2+4)+1];
        
    format(stringsizeof(string), "UPDATE `houses` SET `owner` = '%s' WHERE `id` = '%d' LIMIT 1"gHouse[value][hOwner], i);
        
    mysql_tquery(dbHandlestring"""");
        return 
    1;
    }

    stock strcpy(dest[], src[], const size sizeof(dest))
    {
        
    dest[0] = '\0';
        return 
    strcat(destsrcsize);

    strcpy не обязателен, но раз попросил.

  4. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (17.02.2018)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •