Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

FAQ Как лучше писать код, в одну строку или с табуляцией?

plakapenka

Специалист
Здаров

В этой теме разберем одно из заблуждений относительно написания скриптов на pawn.
А именно:

Весь код лучше записывать в одну строку?

Конечно нет

Не стоит думать, что если строк больше ,то код будет выполняться дольше.

Pawn - компилируемый язык, а это значит, что при нажатии на кнопку компиляции ваш код в amx файле будет выглядеть уже совсем не так, как вы его записывали.
А то, был он написан в одну строку, или несколько, никак не повлияет на финальный вид.

Напишем кусок кода:

C++:
#include <a_samp>
#include <core>

main()
{

}
enum pInfo
{
    pCash
}
new pData[MAX_PLAYERS][pInfo];

public OnPlayerConnect(playerid)
{
    give_me_u_money(playerid);
}
stock give_me_u_money(playerid)
{
    if(pData[playerid][pCash] < 500)
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Недостаточно средств!");
        return 1;
    }
    pData[playerid][pCash] -= 500;
}
Скомпилируем его и посмотрим что же получилось в AMX:
C:
;File version: 8
;Flags:        compact-encoding no-checks

00000000  halt 00000000

00000008  proc
0000000c  zero.pri
00000010  retn

00000014  proc    ; OnPlayerConnect
00000018  push.s 0000000c
00000020  push.c 00000004
00000028  call 00000038
00000030  zero.pri
00000034  retn

00000038  proc
0000003c  zero.alt
00000040  load.s.pri 0000000c
00000048  idxaddr
0000004c  move.alt
00000050  load.i
00000054  add
00000058  load.i
0000005c  const.alt 000001f4
00000064  jsgeq 000000a8
0000006c  push.c 00001f40
00000074  push.c ffffffff
0000007c  push.s 0000000c
00000084  push.c 0000000c
0000008c  sysreq.c 00000000    ; SendClientMessage
00000094  stack 00000010
0000009c  const.pri 00000001
000000a4  retn
000000a8  zero.alt
000000ac  load.s.pri 0000000c
000000b4  idxaddr
000000b8  move.alt
000000bc  load.i
000000c0  add
000000c4  push.pri
000000c8  load.i
000000cc  const.alt 000001f4
000000d4  sub
000000d8  pop.alt
000000dc  stor.i
000000e0  zero.pri
000000e4  retn
А теперь такой же код, но в одну строку:
C++:
#include <a_samp>
#include <core>
main(){ }
enum pInfo
{
    pCash
}
new pData[MAX_PLAYERS][pInfo];

public OnPlayerConnect(playerid){ give_me_u_money(playerid); }

stock give_me_u_money(playerid) { if(pData[playerid][pCash] < 500) {SendClientMessage(playerid, 0xFFFFFFFF, "Недостаточно средств!"); return 1;} pData[playerid][pCash] -= 500; }
AMX:
C:
;File version: 8
;Flags:        compact-encoding no-checks

00000000  halt 00000000

00000008  proc
0000000c  zero.pri
00000010  retn

00000014  proc    ; OnPlayerConnect
00000018  push.s 0000000c
00000020  push.c 00000004
00000028  call 00000038
00000030  zero.pri
00000034  retn

00000038  proc
0000003c  zero.alt
00000040  load.s.pri 0000000c
00000048  idxaddr
0000004c  move.alt
00000050  load.i
00000054  add
00000058  load.i
0000005c  const.alt 000001f4
00000064  jsgeq 000000a8
0000006c  push.c 00001f40
00000074  push.c ffffffff
0000007c  push.s 0000000c
00000084  push.c 0000000c
0000008c  sysreq.c 00000000    ; SendClientMessage
00000094  stack 00000010
0000009c  const.pri 00000001
000000a4  retn
000000a8  zero.alt
000000ac  load.s.pri 0000000c
000000b4  idxaddr
000000b8  move.alt
000000bc  load.i
000000c0  add
000000c4  push.pri
000000c8  load.i
000000cc  const.alt 000001f4
000000d4  sub
000000d8  pop.alt
000000dc  stor.i
000000e0  zero.pri
000000e4  retn

Как видите, разницы ноль ? ?

!! Но обратите внимание, насколько первый кусок кода приятнее смотрится !!

Итог:
Всегда пишите так, чтобы это было приятно читать ЧЕЛОВЕКУ. Машине всё равно, в одну вы строку напишете или в пять/десять/двадцать.





Вообще, конечно, стиль кода - это отдельная и очень долгая история. Но вот вам еще пару примеров, как красиво писать код:

C++:
stock give_me_u_money(playerid) {
    if(pData[playerid][pCash] < 500) {
        SendClientMessage(playerid, 0xFFFFFFFF, "Недостаточно средств!");
        return 1;
    }
    pData[playerid][pCash] -= 500;
}
C++:
stock give_me_u_money(playerid)
{
    if(pData[playerid][pCash] < 500)
    {
        SendClientMessage(playerid, 0xFFFFFFFF, "Недостаточно средств!");
        return 1;
    }
    pData[playerid][pCash] -= 500;
}
C++:
stock give_me_u_money(playerid)
{
  if(pData[playerid][pCash] < 500)
    {
      SendClientMessage(playerid, 0xFFFFFFFF, "Недостаточно средств!");
      return 1;
    }
    pData[playerid][pCash] -= 500;
}

Ах дааа, чуть не забыл
Специально для Pawno-Info.RU
Не разрешается копирование данной статьи на других ресурсах без разрешения автора.
​
 
Последнее редактирование:
Сверху Снизу