Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1159682879
одиндватри
2006-10-01 10:07
2006.10.15
операторные скобки


2-1159436629
RainKMM
2006-09-28 13:43
2006.10.15
Список каталогов


15-1158493473
Furyz
2006-09-17 15:44
2006.10.15
Бесплатные движки форума


15-1158665150
начинающий
2006-09-19 15:25
2006.10.15
Ethernet, не гони!


1-1157703651
КУ
2006-09-08 12:20
2006.10.15
TTreeView и TPopupMenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский