forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Примеры сокращения кода : (http://forum.boolean.name/showthread.php?t=16132)

polopok 01.01.2012 12:36

Примеры сокращения кода :
 
Y = ( KeyDown(203) ) - ( KeyDown(205) )
TurnEntity entity_name,0, Y ,0

; мерцание объекта
EntityAlpha entity_name, Sin( MilliSecs() )*0.5+0.5

; прибавление и сброс на 0
if KeyHit(57) and nomer <4 Then nomer = nomer+1 Else if nomer >3 Then nomer =0

;пустой цикл: ожидает нажатие мыши или клавиатуры,завершает программу
Repeat :Until GetMouse()<>0 Or GetKey()<>0 :End

;цвет меняется синусоидально
Color 0,0 , 64 +Sin ( MilliSecs() /10)*32

пока всё... :)

polopok 01.01.2012 13:09

Ответ: Примеры сокращения кода :
 
; клавиши управления
Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select

;меняем значение переменой
A = Not A

;незабываем использовать двоеточие . пример Типы:
Type tip Field x,y,nom End Type
tip.tip = New tip : tip\x=x : tip\y=y : tip\nom=nom
For tip.tip = Each tip : Print tip\x+" "+tip\y+" "+tip\nom : Next

Платон Александрович 01.01.2012 14:09

Ответ: Примеры сокращения кода :
 
это не сокращение кода, это называется говнокод :)

Цитата:

Сообщение от polopok
Y = ( KeyDown(203) ) - ( KeyDown(205) )
TurnEntity entity_name,0, Y ,0

1) скобки не нужны
2) TurnEntity относительно тяжелая, потому в данном случае надо If Y Then TurnEntity...

Цитата:

Сообщение от polopok
; прибавление и сброс на 0
if KeyHit(57) and nomer <4 Then nomer = nomer+1 Else if nomer >3 Then nomer =0

number = number + KeyHit(57)
If number >= 4 Then number = 0
а если граничное значение степень двойки, то вообще замечательно
number = (number + KeyHit(57)) And (4 - 1)

Цитата:

Сообщение от polopok
;пустой цикл: ожидает нажатие мыши или клавиатуры,завершает программу
Repeat :Until GetMouse()<>0 Or GetKey()<>0 :End

это есть в справке

Цитата:

Сообщение от polopok
;цвет меняется синусоидально
Color 0,0 , 64 +Sin ( MilliSecs() /10)*32

спасибо КЭП, без тебя мы не поняли что Sin это синус :)

Цитата:

Сообщение от polopok
; клавиши управления
Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select

хорошо сократил, аж на две строчки больше чем с If :)

Цитата:

Сообщение от polopok
;меняем значение переменой
A = Not A

не меняем, а отрицаем, удобно для [1, 0] флажков, но тогда лучше так
A = 1 - A
т.к. компилятор блица тупой и умеет not только для условий, соответственно генерит избыточный код

Цитата:

Сообщение от polopok
;незабываем использовать двоеточие . пример Типы:
Type tip Field x,y,nom End Type
tip.tip = New tip : tip\x=x : tip\y=y : tip\nom=nom
For tip.tip = Each tip : Print tip\x+" "+tip\y+" "+tip\nom : Next

ну а это яркий пример говнокода, вообще не читабельно :)

ЗЫ
Пешы ищо ;-) А лучше не пиши, плохой пример подаешь нубам.

HolyDel 01.01.2012 14:11

Ответ: Примеры сокращения кода :
 
можно еще:
if KeyHit(57) Then nomer = nomer+1:nomer = nomer % 4;

на нормальных языках было бы как то так:
if(KeyHit(KEY::SPACE))nomer = ++nomer % 4;

radiobutton 01.01.2012 16:59

Ответ: Примеры сокращения кода :
 
Цитата:

Сообщение от HolyDel (Сообщение 215906)
можно еще:
if KeyHit(57) Then nomer = nomer+1:nomer = nomer % 4;

на нормальных языках было бы как то так:
if(KeyHit(KEY::SPACE))nomer = ++nomer % 4;

nomer++ % 4

а не так разьве?)

Платон Александрович 01.01.2012 17:27

Ответ: Примеры сокращения кода :
 
Цитата:

Сообщение от radiobutton (Сообщение 215907)
nomer++ % 4

а не так разьве?)

Нет, в постфиксной записи инкрементирование выполнится после деления по модулю, по крайней мере гарантии нет (зависит от компилятора), а в инфиксной определенно первым будет инкремент.

polopok 01.01.2012 20:00

Ответ: Примеры сокращения кода :
 
приятно ,что тема "пошла" . признаться написанное мною имело цель удобства ... но несомненно есть более изящные решения и я в свою очередь благодарен всем отписавшимся в их вариантах решений.
в конечном случае выбор остаётся за пользователем.
конечно я не утверждал что мои решения Абсолютны ,дескать делай как я.
предлагаю поделиться вам уважаемые опытные программисты своими решениями ,пусть небольшими примерами ...
спасибо.

radiobutton 01.01.2012 23:22

Ответ: Примеры сокращения кода :
 
Цитата:

Сообщение от Платон Александрович (Сообщение 215908)
Нет, в постфиксной записи инкрементирование выполнится после деления по модулю, по крайней мере гарантии нет (зависит от компилятора), а в инфиксной определенно первым будет инкремент.

kogda tak
m = n++ % 4
to +1 budit vipolneno posle % 4?
esli n=3, to m = 4? (ili m = 0 ? xD)

posledniy raz s etoy temoy stalkivalsya goda 4 nazad>< poetomu ne pomnu uje :)

sor za tranlit

Randomize 03.01.2012 04:22

Ответ: Примеры сокращения кода :
 
Цитата:

Сообщение от radiobutton (Сообщение 215922)
kogda tak
m = n++ % 4
to +1 budit vipolneno posle % 4?
esli n=3, to m = 4? (ili m = 0 ? xD)

posledniy raz s etoy temoy stalkivalsya goda 4 nazad>< poetomu ne pomnu uje :)

sor za tranlit

Вот ты и попался! Стремительно и быстро поясни с какого тостера ты это писал?!

HolyDel 03.01.2012 13:53

Ответ: Примеры сокращения кода :
 
с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?

radiobutton 03.01.2012 13:58

Ответ: Примеры сокращения кода :
 
Цитата:

Сообщение от HolyDel (Сообщение 215993)
с постфиксным инкрементом будет от 1 до 4 гулять. с префиксом от 0 до 3. в первоисточнике было от 0 до 3, не?

Я думал наоборот. :)
если ++n это префиксный.

HolyDel 03.01.2012 14:24

Ответ: Примеры сокращения кода :
 
можно перфиксную форму разложить так:
Код:

temp1 = n+1
temp2 = temp1 % 4
n = temp2

а постфиксную:
Код:

temp1 = n % 4
n = temp1
n = n +1


reumep 08.01.2012 01:21

Ответ: Примеры сокращения кода :
 
Проще писать понятный отформатированный код, не?

moka 08.01.2012 05:56

Ответ: Примеры сокращения кода :
 
Всё из первого и второго поста ужасный говнокод.
Учитывая кучу проблем с инпутом, нужно обязательно выносить клавиши инпута в отдельные переменные. И лишь при уверенном редком использовании в цикле лишь один раз клавиши, можно писать функцию доступа к данным инпута прямо в теле условий и т.п.

Например такое:
Цитата:

Select True
Case KeyDown(205 ) : x = x +1; вправо
Case KeyDown(203 ) : x = x -1; влево
Case KeyDown(208 ) : y = y +1; вниз
Case KeyDown(200 ) : y = y -1; вверх
End Select
Нужно как минимум переписать вот так:

Код:

keyRight = KeyDown(205)
keyLeft = KeyDown(203)
keyUp = KeyDown(200)
keyDown = KeyDown(208)

x = keyLeft - keyRight
y = keyUp - keyDown

Не будет проблем с инпутом, да и читать такое удобнее.
Но это лишь простой пример, даже такой не однозначен, и во многих ситуациях не корректен.

Остальные есть ещё хуже..
Я бы такое в "Полезные Функции" не постил.

tirarex 08.01.2012 13:37

Ответ: Примеры сокращения кода :
 
нубско но

if keyhit(2)
a=1
end if
if not keyhit(2)
a=0
end if

можно в

if keyhit(2)
a=1
else
a=0
end if


Часовой пояс GMT +4, время: 06:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot