Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.15;
Скачать: CL | DM;

Вниз

Читабельно или красиво - что приоритетнее?   Найти похожие ветки 

 
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 :-))


 
Alx2 ©   (2006-09-19 22:56) [41]

Сейчас будет состязание на самый короткий и/или быстрый код :)


 
Marser ©   (2006-09-19 23:02) [42]

> [41] Alx2 ©   (19.09.06 22:56)
> Сейчас будет состязание на самый короткий и/или быстрый
> код :)

Чапаев пока рекордсмен. По его наводке :-)
b:=ord(st[1]<>#$7E)+1;


 
SergP ©   (2006-09-19 23:04) [43]

> [40] Marser ©   (19.09.06 22:56)
> > [39] Petr V. Abramov ©   (19.09.06 22:54)
> > > Marser ©   (19.09.06 19:46)  
> > > b:=integer(not(st[1]=#$7E))+1;
> > ты ловко подметил пример т.н. вые...на. А уж как лучше
>
> > - в стиле примера или без - решать каждому самому :)
>
> А я таким нехитрым способом отучаю себя бояться форумной
> критики :-)
> Потому что в реальном коде реализовал через if :-))


А все-таки тот другой код не мешало бы держать где-то поблизости (в коментариях) чтобы при возникновении ситуации [14] можно было все быстро и без проблем поменять...


 
guav ©   (2006-09-19 23:05) [44]

b:=succ(sign(word($7E-byte(st[1]))))
:-P


 
SergP ©   (2006-09-19 23:08) [45]

> Чапаев пока рекордсмен. По его наводке :-)
> b:=ord(st[1]<>#$7E)+1;


Это по кол-ву буковков?


 
Petr V. Abramov ©   (2006-09-19 23:11) [46]

> Marser ©   (19.09.06 22:56) [40]
> А я таким нехитрым способом отучаю себя бояться форумной критики :-)
> Потому что в реальном коде реализовал через if :-))
 я и не сомневался. пост был написан "другим в науку" на прекрасном примере, любезно Вами предоставленном :-))


 
Marser ©   (2006-09-19 23:12) [47]

> [46] Petr V. Abramov ©   (19.09.06 23:11)
> > Marser ©   (19.09.06 22:56) [40]
> > А я таким нехитрым способом отучаю себя бояться форумной
> критики :-)
> > Потому что в реальном коде реализовал через if :-))
> я и не сомневался. пост был написан "другим в науку" на
> прекрасном примере, любезно Вами предоставленном :-))

Пример конкретный, а на общий вопрос ответов практически не было.


 
guav ©   (2006-09-19 23:23) [48]

> на общий вопрос ответов практически не было.

Как же, см. первый же ответ.

Могу ещё раз ответить если надо
> Так что оптимальнее? То, что понятнее, прозрачнее и проще
> расширяется, или то, что красиво для тебя сейчас или врамках
> некоего обего трюкачества?

Красиво как раз то что понятнее, прозрачнее и проще, а с трюкачеством следует боротся.

А насчёт трюкачества

> Проверено, в общем-то не раз, правда, обычно я привожу к
> byte

> Мне, кстати, сишных фич с выражениями иногда не хватает.

Похоже склонность таки есть :-)


 
Eraser ©   (2006-09-19 23:24) [49]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Math;

type
 TForm1 = class(TForm)
   btnTest1: TButton;
   lbTime: TLabel;
   btnTest2: TButton;
   procedure btnTest2Click(Sender: TObject);
   procedure btnTest1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

const
 InterationCount = 100000000;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnTest1Click(Sender: TObject);
var
 st: string;
 i, b: Integer;
 dt1: TDateTime;
begin
 st := "test";
 dt1 := Now;
 for i := 0 to InterationCount do
   //b := ord(st[1] <> #$7E) + 1;
   b := Integer(not(st[1] = #$7E)) + 1;

 dt1 := Now - dt1;
 // Чтобы не ругался компилятор :)
 TButton(Sender).Caption := "Test1" + IntToStr(b);
 lbTime.Caption := FormatDateTime("ss - zzz", dt1);
end;

procedure TForm1.btnTest2Click(Sender: TObject);
var
 st: string;
 i, b: Integer;
 dt1: TDateTime;
begin
 st := "test";
 dt1 := Now;
 for i := 0 to InterationCount do
 begin
   if st[1] = #$7E then
     b := 1
   else
     b := 2;
 end;
 dt1 := Now - dt1;
 // Чтобы не ругался компилятор :)
 TButton(Sender).Caption := "Test2" + IntToStr(b);
 lbTime.Caption := FormatDateTime("ss - zzz", dt1);
end;

end.

на моем Атлоне3000 первый вариант выполняется в среднем за 220 мс, второй за 340 мс.
если количесво интераций сделать хотя бы на порядок меньше, то разницы нету.
:-)


 
Eraser ©   (2006-09-19 23:26) [50]

вариант с b := ord(st[1] <> #$7E) + 1; - 160 мс.


 
guav ©   (2006-09-19 23:33) [51]

> на моем Атлоне3000 первый вариант выполняется в среднем
> за 220 мс, второй за 340 мс.

Удивился что b := Integer(not(st[1] = #$7E)) + 1; быстрее, проверил у себя - у меня наоборот 320 первый 220 второй.
[50] - 250.

Celeron 2000.


 
Marser ©   (2006-09-19 23:33) [52]

> Похоже склонность таки есть :-)

Но так глубоко я не залазил раньше и сейчас не залез. Просто если по галочке в пакете формируется ноль или единица, то так всё-таки удобнее, вроде byte(some_chb.Checked)


 
Eraser ©   (2006-09-19 23:38) [53]

> [51] guav ©   (19.09.06 23:33)

может компиляторы разные.. у меня БДС2006.

вот ассемблер 1 примера:

Unit1.pas.40: for i := 0 to InterationCount do
0045472E B801E1F505       mov eax,$05f5e101
Unit1.pas.41: b := ord(st[1] <> #$7E) + 1;
00454733 8B55FC           mov edx,[ebp-$04]
00454736 803A7E           cmp byte ptr [edx],$7e
00454739 0F95C3           setnz bl
0045473C 83E37F           and ebx,$7f
0045473F 43               inc ebx
Unit1.pas.40: for i := 0 to InterationCount do
00454740 48               dec eax
00454741 75F0             jnz $00454733
Unit1.pas.44: dt1 := Now - dt1;
00454743 E88056FBFF       call Now


вот второго:

Unit1.pas.58: for i := 0 to InterationCount do
00454836 B801E1F505       mov eax,$05f5e101
Unit1.pas.60: if st[1] = #$7E then
0045483B 8B55FC           mov edx,[ebp-$04]
0045483E 803A7E           cmp byte ptr [edx],$7e
00454841 7507             jnz $0045484a
Unit1.pas.61: b := 1
00454843 BB01000000       mov ebx,$00000001
00454848 EB05             jmp $0045484f
Unit1.pas.63: b := 2;
0045484A BB02000000       mov ebx,$00000002
Unit1.pas.58: for i := 0 to InterationCount do
0045484F 48               dec eax
00454850 75E9             jnz $0045483b
Unit1.pas.66: dt1 := Now - dt1;
00454852 E87155FBFF       call Now


 
Eraser ©   (2006-09-19 23:40) [54]

вот вариант с b := Integer(not(st[1] = #$7E)) + 1; как в первом примере [49].

Unit1.pas.40: for i := 0 to InterationCount do
0045472E B801E1F505       mov eax,$05f5e101
Unit1.pas.42: b := Integer(not(st[1] = #$7E)) + 1;
00454733 8B55FC           mov edx,[ebp-$04]
00454736 803A7E           cmp byte ptr [edx],$7e
00454739 0F94C3           setz bl
0045473C 80F301           xor bl,$01
0045473F 83E37F           and ebx,$7f
00454742 43               inc ebx
Unit1.pas.40: for i := 0 to InterationCount do
00454743 48               dec eax
00454744 75ED             jnz $00454733
Unit1.pas.44: dt1 := Now - dt1;
00454746 E87D56FBFF       call Now


 
guav ©   (2006-09-19 23:41) [55]


> [52] Marser ©   (19.09.06 23:33)

> Просто если по галочке в пакете формируется ноль или единица,
> то так всё-таки удобнее, вроде byte(some_chb.Checked)

На этот случай часто удобнее вариант [12] , т.к. более гибкий


> [53] Eraser ©   (19.09.06 23:38)

Нет, код такой же, дело в процессоре.


 
Zeqfreed ©   (2006-09-19 23:42) [56]

Ещё надо посчитать вариант с if. Думается мне, что он не будет уступать «быстрым» вариантам :)


 
KilkennyCat ©   (2006-09-19 23:43) [57]

Мне бы ваши проблемы... у меня серъезная травма ног часов на шесть еще, последние патроны истратил на мара сразу при входе в шахту...


 
Eraser ©   (2006-09-19 23:44) [58]

> [56] Zeqfreed ©   (19.09.06 23:42)

дык посчитан - второй вариант в примерах оно и есть )

а вот если использовать вызов Math.IfThen то вообще около 500 мс выходит.. ну это и не удивительно )


 
default ©   (2006-09-19 23:46) [59]

тяжёлый случай


 
Zeqfreed ©   (2006-09-19 23:50) [60]

> [58] Eraser ©   (19.09.06 23:44)

Да, действительно :) Извиняюсь.


 
Marser ©   (2006-09-20 00:23) [61]

> [55] guav ©   (19.09.06 23:41)
>
> > [52] Marser ©   (19.09.06 23:33)
>
> > Просто если по галочке в пакете формируется ноль или единица,
>
> > то так всё-таки удобнее, вроде byte(some_chb.Checked)
>
> На этот случай часто удобнее вариант [12] , т.к. более гибкий

Ну и зачем мне гибкость при работе с галочкой? Я по работе всё-таки больше занимаюсь не кодоблудием как в сабже, мне с "чёрным ящиком" приходится дело иметь.


 
guav ©   (2006-09-20 01:16) [62]

> [61] Marser ©   (20.09.06 00:23)

Ну тогда для 0..1 вариант вроде ord(some_chb.Checked) вполне допустим. Но я всё равно за if .


 
Тугодум ©   (2006-09-20 09:05) [63]

Marser ©   (19.09.06 19:46)  

b:=integer(not(st[1]=#$7E))+1;

b:=Ord(not(st[1]=#$7E))+1;

И будет гарантия правильной работы.


 
Чапаев ©   (2006-09-20 09:34) [64]

> Чапаев пока рекордсмен. По его наводке :-)
>

Ещё одно улучшение: b:=ord(st[1]<>127)+1;
Сэкономлен один символ исходного кода...


 
Lamer@fools.ua ©   (2006-09-20 09:49) [65]

>>Чапаев ©   (20.09.06 09:34) [64]

>Сэкономлен один символ исходного кода...
Вот это как раз и неправильно. Как же потом меряться, у кого проект... э-э-э... толще и длинее? ;o)


 
Marser ©   (2006-09-20 09:51) [66]

> [65] Lamer@fools.ua ©   (20.09.06 09:49)
> >>Чапаев ©   (20.09.06 09:34) [64]
>
> >Сэкономлен один символ исходного кода...
> Вот это как раз и неправильно. Как же потом меряться, у
> кого проект... э-э-э... толще и длинее? ;o)

Правильно! Я люблю, чтобы поменьше :-)
Побольше надо в другом месте, но там уж кому как повезёт :-)

> [63] Тугодум ©   (20.09.06 09:05)
> Marser ©   (19.09.06 19:46)  
>
> b:=integer(not(st[1]=#$7E))+1;
>
> b:=Ord(not(st[1]=#$7E))+1;
>
> И будет гарантия правильной работы.

Гарантия и так есть, а вообще, читайте ветку, это уже было.


 
Яся   (2006-09-20 09:53) [67]

Не жертвуйте ясностью ради небольших выгод эффективности
(С) Кнут


 
Наиль ©   (2006-09-20 09:54) [68]


> Ещё одно улучшение: b:=ord(st[1]<>127)+1;

b:=ord(st[1]<>#127)+1;


 
Чапаев ©   (2006-09-20 09:59) [69]

> [68] Наиль ©   (20.09.06 09:54)

шъйорт побьеры... :-(


 
Virgo_Style ©   (2006-09-20 10:06) [70]

st -> s

b:=ord(s[1]<>#127)+1;

еще ~4.5%


 
Игорь Шевченко ©   (2006-09-20 10:39) [71]

TRUE действительно бывает равно -1, в типе LongBool, например.

Писать код надо так, чтобы любой рядовой необученный программист не ломал голову над кодом, а сразу мог понять логику участка программы.

Всех, кто пишет "ловко" в одну строчку, надо бить палкой по пяткам до полного просветления.


 
Тугодум ©   (2006-09-20 13:03) [72]

Marser ©   (20.09.06 09:51) [66]

Нет, гарантии нет. А вообще-то я не зря себе ник выбрал :)


 
SergP ©   (2006-09-20 13:18) [73]

> [70] Virgo_Style ©   (20.09.06 10:06)
> st -> s
>
> b:=ord(s[1]<>#127)+1;
>
> еще ~4.5%


В таком случае:

b:=2-ord(s[1]=#127);

еще один символ съэкономлен... :-)


 
SergP ©   (2006-09-20 13:21) [74]

> [73] SergP ©   (20.09.06 13:18)
> > [70] Virgo_Style ©   (20.09.06 10:06)
> > st -> s
> >
> > b:=ord(s[1]<>#127)+1;
> >
> > еще ~4.5%
>
>
> В таком случае:
>
> b:=2-ord(s[1]=#127);
>
> еще один символ съэкономлен... :-)


Только правда в сабже было $7E , а это не 127, а 126

А вот и экономия еще одного символа:

b:=2-ord(s[1]="~");

:-)))


 
Ketmar ©   (2006-09-20 15:48) [75]

по сабжу. %-)
подобными конструкциями я "болел", когда писал на basic"е для Speccy. там это -- нормальная практика. когда поработал в команде -- меня от этого отучили быстро и больно. %-)


 
ZeroDivide ©   (2006-09-20 16:56) [76]

default ©   (19.09.06 21:39) [33]
В натуре LMD можно вписывать.



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.15;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.04 c
5-1140943637
Reset
2006-02-26 11:47
2006.10.15
Default - значения свойств


3-1155194553
DancerMan
2006-08-10 11:22
2006.10.15
FB и пароли доступа к базам


15-1158853641
hamster
2006-09-21 19:47
2006.10.15
Где винт???


4-1148541913
Elen
2006-05-25 11:25
2006.10.15
Какая функция API срабатывает при нажатии "Сохранить Как"


1-1157537466
SkyN
2006-09-06 14:11
2006.10.15
Как юзать тип MAP из C++,нужно для импорта функции из другой прог