Форум: "Прочее";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
ВнизЧитабельно или красиво - что приоритетнее? Найти похожие ветки
← →
Marser © (2006-09-19 19:46) [0]Простой пример - проверяем выражение, если оно верно, присваиваем 1, иначе 2.
Можно сделать в лоб:if ch=#$7E then b:=1
else b:=2;
Читабельно и просто.
Можно без if, "ловко" в одну строчку:b:=integer(not(st[1]=#$7E))+1;
Ну а дальше этот код, возможно, попадёт к другому человеку. Так что оптимальнее? То, что понятнее, прозрачнее и проще расширяется, или то, что красиво для тебя сейчас или врамках некоего обего трюкачества?
Разработчики Борланда уже научили меня ставить точки с запятыми перед окончанием блока...
← →
Ega23 © (2006-09-19 19:50) [1]Я всегда в таких случаях этот пример привожу:
#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n"+,#"/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/"r :"d*"3,}{w+K w"K:"+}e#";dq#"l \
q#"+d"K#!/+k#;q#"r}eKK#}w"r}eKK{nl]"/#;#q#n"){)#}w"){){nl]"/+#n";d}rw" i;# \
){nl]!/n{n#"; r{#w"r nc{nl]"/#{l,+"K {rw" iK{;[{nl]"/w#q#n"wk nw" \
iwk{KK{nl]!/w{%"l##w#" i; :{nl]"/*{q#"ld;r"}{nlwb!/*de}"c \
;;{nl"-{}rw]"/+,}##"*}#nc,",#nw]"/+kd"+e}+;#"rdq#w! nr"/ ") }+}{rl#"{n" ")# \
}"+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=="/")+t,_,a+1)
:0<t?main(2,2,"%s"):*a=="/"||main(0,main(-61,*a,
"!ek;dc i@bK"(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
← →
Ega23 © (2006-09-19 19:53) [2]
> b:=integer(not(st[1]=#$7E))+1;
Кстати, а где гарантия, что Integer(True)=1 ? Можно быть увереным в том, что Integer(False)=0, а вот с True - это вопрос.
← →
TUser © (2006-09-19 19:53) [3]> Marser © (19.09.06 19:46)
Учишся за неделю выглядеть кртым сишником?)
← →
Чапаев © (2006-09-19 19:54) [4]-- Эта модель не полетит.
-- Почему? Мы всё расчитали!
-- Она некрасивая.
(с) вроде Королёв
← →
Marser © (2006-09-19 19:58) [5]> [3] TUser © (19.09.06 19:53)
> > Marser © (19.09.06 19:46)
>
> Учишся за неделю выглядеть кртым сишником?)
Не, это Керк :-)
Мне, кстати, сишных фич с выражениями иногда не хватает.
> Кстати, а где гарантия, что Integer(True)=1 ? Можно быть
> увереным в том, что Integer(False)=0, а вот с True - это
> вопрос.
Попробуй. Проверено, в общем-то не раз, правда, обычно я привожу к byte, вообще тяготею к беззнаковым целым - byte, word, cardinal aka DWORD.
← →
Alx2 © (2006-09-19 20:00) [6]>Marser © (19.09.06 19:58)
TRUE кое-где "равно" -1 :)
← →
Marser © (2006-09-19 20:07) [7]> [6] Alx2 © (19.09.06 20:00)
> >Marser © (19.09.06 19:58)
>
> TRUE кое-где "равно" -1 :)
Потому я и привожу к byte обычно, ибо нутром чую, хотя не видел ещё :-)
Кстати, а при каких условиях? А то -1 это как бы старший байт...
← →
Чапаев © (2006-09-19 20:08) [8]а я бы вместо integer() использовал ord()...
← →
Marser © (2006-09-19 20:11) [9]> [8] Чапаев © (19.09.06 20:08)
> а я бы вместо integer() использовал ord()...
Угу.
Вот потому я и не понимаю, откуда может вылезти -1.
← →
Alien1769 © (2006-09-19 20:12) [10]Alx2 ©
хотим знать. удиви.
← →
ИА (2006-09-19 20:12) [11]Понятия о красоте у всех разные.
У нас считается красиво примерно следующее (вместо ... вставить пояснения):
//Проверяем на ...
if ch=#$7E then
begin
// Возвращаем 1 так как...
b:=1;
end
else
begin
// Если не выполняется возвращаем 2 так как...
b:=2;
end;
Код же b:=integer заставил бы переписывать, за исключением если выглядит примерно так:
//Принудительно типизируем bool в Int и добавляем 1. Экономим еще пару команд по сравнению с if/then
b:=integer(not(st[1]=#$7E))+1;
← →
Leonid Troyanovsky © (2006-09-19 20:13) [12]
> Marser © (19.09.06 19:46)
> b:=integer(not(st[1]=#$7E))+1;
const
tilde = "~";
map: array [Boolean] of Longint = (1, 2);
..
b := map[ch <> tilde];
--
Regards, LVT.
← →
guav © (2006-09-19 20:14) [13]> b:=integer(not(st[1]=#$7E))+1;
Когда я был совсем неопытным и писал на TP7 паскале, писал так, наивно предполагая что оно будет выполнятся быстрее (к целому привоил через ord, при этом часто умножал на это целое).
Сейчас считаю, что ничего "красивого" в таком коде нет.
Часто встречается такой вариант (в т.ч. и в исходниках борланда):
const V: array[Boolean] of Integer = (1, 2);
b:=V[st[1] <> #$7E];
, он несколько лучше. Но не стоит его применять, если Boolean не вычисляется, а, например читается откуда-то.
Всё равно, if надёжнее
← →
Alien1769 © (2006-09-19 20:14) [14]
> Можно без if, "ловко" в одну строчку:
> b:=integer(not(st[1]=#$7E))+1;
Обычно переписывал для наследства уходя с фирмы.
← →
Alx2 © (2006-09-19 20:16) [15]>Marser © (19.09.06 20:07)
>Потому я и привожу к byte обычно, ибо нутром чую, хотя не видел ещё :-)
Оно получится тогда 255 вместо 1.
>Alien1769 © (19.09.06 20:12)
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Variant(True)));
end;
← →
Marser © (2006-09-19 20:17) [16]> [12] Leonid Troyanovsky © (19.09.06 20:13)
Я с хексами всё больше работаю, то что это тильда, меня не волнует.
> [13] guav © (19.09.06 20:14)
Обоснуй.
← →
Alien1769 © (2006-09-19 20:18) [17]
> ShowMessage(IntToStr(Variant(True)));
Про Variant то понятно, но это уже другое..
← →
Alx2 © (2006-09-19 20:19) [18]>Alien1769 © (19.09.06 20:18)
Сорри, что удивить не получилось :)
← →
guav © (2006-09-19 20:21) [19][16] Marser ©
> Обоснуй.
Что именно ?
← →
Leonid Troyanovsky © (2006-09-19 20:22) [20]
> Marser © (19.09.06 20:17) [16]
> Я с хексами всё больше работаю, то что это тильда, меня
> не волнует.
Ну, а раз с hex, то и не нужен # - работай с байтами.
Ты ж не про себя спрашиваешь, а про того кто это разбирать будет.
Пусть будет не тильда, а SomeSpecialByte.
--
Regards, LVT.
← →
Чапаев © (2006-09-19 20:24) [21]> > Обоснуй.
> Что именно ?
"Непраааавильно ты, дядя Фёдор, колбасу ешь..." Надо было сказать "От обоснуя слышу!"
← →
Gero © (2006-09-19 20:28) [22]> то, что красиво для тебя сейчас
ЭТО красиво? b:=integer(not(st[1]=#$7E))+1; ?
← →
Alx2 © (2006-09-19 20:33) [23]>Marser © (19.09.06 20:07)
>Кстати, а при каких условиях? А то -1 это как бы старший байт...
Про -1 написал. Но вот, откуда-то "слева" (например, как параметр в функцию) может прийти булева переменная, полученная способом, описанным ниже:
procedure TForm1.Button4Click(Sender: TObject);
Var Test : Boolean;
begin
Test := Boolean(15);
if Test then
ShowMessage(IntToStr(Integer(Test)));
end;
Кроме того, особенности физической реализации типов не вечны. Что если твой проект будут портировать на другую платформу?
← →
Leonid Troyanovsky © (2006-09-19 20:43) [24]
> Marser © (19.09.06 20:11) [9]
> Вот потому я и не понимаю, откуда может вылезти -1.
И не надо понимать, надо запомнить, что False - первый,
True - второй. В смысле Ord (а не typecast).
А вот вызовы Win32 (с LongBool) могут преподнести
неприятные сюрпризы.
--
Regards, LVT.
← →
Ketmar © (2006-09-19 20:43) [25]кстати, почитал сабж. имо "красиво" -- это и есть "читабельно".
← →
default © (2006-09-19 20:50) [26]разумно под красотой понимать некое благоприятное соотношение эффективности и читабельности
← →
Ketmar © (2006-09-19 20:57) [27]в случаях, подобных вышеописанному, об эффективности заботится компилятор. а вообще, фэффективность -- эот прежде всего быстрые и красивые алгоритмы.
← →
Kerk © (2006-09-19 21:00) [28]> [7] Marser © (19.09.06 20:07)
True - это все, что не 0 (ноль).
← →
default © (2006-09-19 21:02) [29]читабельность невыносимо важна когда постоянно идёт работа с кодом друг друга
кто-то что-то написал, потом дали дописывать другому, опять вернули дописывать/исправлять первому, потом всё это пихнули третьему и тд
в таких случаях читабельность экономит время, деньги, нервы,...
← →
Leonid Troyanovsky © (2006-09-19 21:08) [30]
> Ketmar © (19.09.06 20:57) [27]
> компилятор. а вообще, фэффективность -- эот прежде всего
> быстрые и красивые алгоритмы.
Быстрота - здесь уже излишняя сущность.
Ну, а эффективность следовало бы рассматривать суммарную,
т.е., с учетом написания, отладки, сопровождения и т.д. самого кода.
Вот тогда-то и будет видна практичность правильнописания.
Т.е., не надо как лучше, нужно как положено.
--
Regards, LVT.
← →
Marser © (2006-09-19 21:10) [31]> [28] Kerk © (19.09.06 21:00)
> > [7] Marser © (19.09.06 20:07)
>
> True - это все, что не 0 (ноль).
Это при преобразовании в boolean.
> кстати, почитал сабж. имо "красиво" -- это и есть "читабельно".
Ну вот такой я извращенец :-)
← →
Eraser © (2006-09-19 21:20) [32]> Можно сделать в лоб:
> if ch=#$7E then b:=1
> else b:=2;
> Читабельно и просто.
> Можно без if, "ловко" в одну строчку:
> b:=integer(not(st[1]=#$7E))+1;
ф-ция IfThen из модуля Math выглядет так:function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer): Integer;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;
и это неспроста ))
← →
default © (2006-09-19 21:39) [33]было время когда мне виделись вещи типа сабжа интересными, оригинальными,... сейчас я на это смотрю как на откровенную галиматью
чуть ли не LMD можно выписывать:)
подобные финты часто неэффективны вовсе ибо это не рядовые конструкции, а оптимизатор рассчитан по большей части на рядовые конструкции
так что тут одни минусы...
лишь в очень критичных и стало быть очень редких случаях надо прибегать к подобному коду
← →
Marser © (2006-09-19 21:58) [34]> [32] Eraser © (19.09.06 21:20)
> ф-ция IfThen из модуля Math выглядет так:
> function IfThen(AValue: Boolean; const ATrue: Integer; const
> AFalse: Integer): Integer;
> begin
> if AValue then
> Result := ATrue
> else
> Result := AFalse;
> end;
Таки неспроста :-)
И в шестёрке её нету...
← →
default © (2006-09-19 22:08) [35]Marser © (19.09.06 21:58) [34]
зато есть конструкция ? : в других языках, по задумке похожа, но куда лучше [34]
← →
SergP © (2006-09-19 22:47) [36]> b:=integer(not(st[1]=#$7E))+1;
Можно так:
b:=2-integer(st[1]=#$7E);
так будет буковков меньше....
← →
Чапаев © (2006-09-19 22:51) [37]> not(st[1]=#$7E)
кстати, нафига нот+равно, а не <>?
← →
Marser © (2006-09-19 22:52) [38]> [37] Чапаев © (19.09.06 22:51)
> > not(st[1]=#$7E)
>
> кстати, нафига нот+равно, а не <>?
А чтобы флуд развести :-)
← →
Petr V. Abramov © (2006-09-19 22:54) [39]> Marser © (19.09.06 19:46)
> b:=integer(not(st[1]=#$7E))+1;
ты ловко подметил пример т.н. вые...на. А уж как лучше - в стиле примера или без - решать каждому самому :)
← →
Marser © (2006-09-19 22:56) [40]> [39] Petr V. Abramov © (19.09.06 22:54)
> > Marser © (19.09.06 19:46)
> > b:=integer(not(st[1]=#$7E))+1;
> ты ловко подметил пример т.н. вые...на. А уж как лучше
> - в стиле примера или без - решать каждому самому :)
А я таким нехитрым способом отучаю себя бояться форумной критики :-)
Потому что в реальном коде реализовал через if :-))
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.043 c