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

HolyDel 08.01.2012 14:15

Ответ: Примеры сокращения кода :
 
a = keyhit(2)

LLI.T.A.L.K.E.R. 08.01.2012 16:00

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

Сообщение от HolyDel (Сообщение 216307)
a = keyhit(2) :super:

Надеюсь никто не расстроился в своих начинаниях. :cool:

burovalex 13.04.2012 23:10

Ответ: Примеры сокращения кода :
 
Вообще полезно!
Понравилось!
Если собрать вместе что узнал, то получится :-)

Код:

keySpace=keyHit(57)
keyLeft=keyDown(203)
keyRight=keyDown(205)

a=(a+keySpace)%4
x=keyLeft+keyRight
if x then MoveEntity ent,x,0,0


ffinder 13.04.2012 23:41

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

Igor 14.04.2012 00:17

Ответ: Примеры сокращения кода :
 
А комментарии зачем придумали?

HolyDel 14.04.2012 00:41

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

x=keyLeft+keyRight
наверное keyRight - keyLeft

impersonalis 14.04.2012 01:41

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

Сообщение от Igor (Сообщение 225424)
А комментарии зачем придумали?

я часто представляю код как тележку с пожитками:
говнокод - это когда чёрти чо и с боку бантик: поросёнок обёрнут в ночнушку, еда лежит вперемешку с деньгами, а вся конструкция для надёжности перевязана ленточками.

код оптимизированный это: бутылки завёрнутые в носки и газеты, носки запихнутые в сменную обувь; мыло и книги убранные поглубже в чемодан, а туалетка и билет - наоборот - поближе (сокращение времени доступа к наиболее вероятным объектам). Правда, теперь скомпилировать аптечку не так просто: "антиобосрин" лежит под рукой (акклиматизация), а крем от идиотов - на самом дне чемодана.

код структурированный (после рефакторинга): носки по парам в пакетиках (дырявые выброшены), пакетики с белыми носками в пакете с надписью "носки белые, ГОСТ ***, кол-во, дата упаковки, амортизация, ответственный" и т.п. Каждая вещь на месте. Всё гиперсистематизировано, но совсем не компактно.

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

ffinder 14.04.2012 11:42

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

kostya261 17.04.2012 00:09

Ответ: Примеры сокращения кода :
 
Свои способности к оптимизации неплохо на микроконтроллерах оттачивать :)
У них до сих пор память килобайтами измеряется.
И здесь рулит ассемблер!
Хотя сам последнее время срулил на Си.
Правда здесь буржуи изначально подложили свинью (за удобства оказывается платить нужно). Компиляторы lite версий код не то что бы совсем не оптимизировали, просто оставшуюся свободную память забивали ассемблерными командами перехода. Спасибо хакерам за их труды, и кейгены. Код сразу раза в три меньше становиться.

Вся сия писанина относится к контроллерам Микрочип и HI-Tech C compiler.


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

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