Главная страница
    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 :-))


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.66 MB
Время: 0.063 c
3-1155380497
Andrew___*
2006-08-12 15:01
2006.10.15
Как скрыть повторяющиеся записи?


1-1157366830
Кабанчик
2006-09-04 14:47
2006.10.15
Синхронизация компонентов


3-1155109813
fishka
2006-08-09 11:50
2006.10.15
Не могу записать в InterBase JPG (c BMP - нормально)


15-1159286396
Михель
2006-09-26 19:59
2006.10.15
А как делаются отправлялки смсок, кто-нибудь знает?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский