Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Вниз

"Феня" компилятора   Найти похожие ветки 

 
AndreyRus ©   (2009-08-16 13:37) [0]

Обнаружил следующую строку в иследуемом коде

Result:= С = GetChecksum(s);


Сроду такого не видал...
Правильно ли я понимаю, что этот код значит:

Result:= false;
if С = GetChecksum(s) then Result:= true;


 
KilkennyCat ©   (2009-08-16 13:41) [1]

скорее if С = GetChecksum(s) then Result := true else Result := false;


 
Kolan ©   (2009-08-16 13:52) [2]

Сравнения возвращают булево значение, с ним можно делать все что угодно, в данном случае положить в переменную Result.


 
Palladin ©   (2009-08-16 13:54) [3]


> AndreyRus ©   (16.08.09 13:37)

и что же удивительного в том что Boolean переменной назначается Boolean результат? не вижу в этом никакой "особенной фени". Почему ты не удивляешься что c:=a-b; ?


 
sniknik ©   (2009-08-16 13:56) [4]

> Сроду такого не видал...
как много нам открытий чудных ...

вообще то такая запись гораздо более нормальна, и , имхо, чаще встречается чем вариант с if else.
даже анекдот есть на эту тему - типа, только программист может решить уже решенную задачу, вот например чему равно 2 + 2 = 4 ?... естественно true!
а тут это труе и присваивается.


 
Palladin ©   (2009-08-16 14:02) [5]


> как много нам открытий чудных ...

Он еще больше открытий чудных сделает, почитав хотя бы учебники по Турбо Паскалю... Эта "особенная феня" и там есть...


 
Anatoly Podgoretsky ©   (2009-08-16 14:22) [6]

> AndreyRus  (16.08.2009 13:37:00)  [0]

Гениально

if true then Result:= true;


 
TIF ©   (2009-08-16 14:37) [7]

> Обнаружил следующую строку в иследуемом кодеResult:= С =
> GetChecksum(s);

Ну это только на первый взгляд выглядит необычно :)


 
SPeller ©   (2009-08-16 14:59) [8]

надо логическую операцию в скобки брать, тогда нагляднее будет


 
TUser ©   (2009-08-16 22:36) [9]

Насчет нагляднее можно поспорить, потому что я сам так пишу иногда.

:)


 
antonn ©   (2009-08-16 22:39) [10]

а я никогда не писал так, отчасти потому что не знал, да если бы и знал - все равно не писал бы, if then нагляднее, а это важнее -1 одной строчки :)


 
TUser ©   (2009-08-16 22:50) [11]

Но тернарный оператор - это еще большее зло.


 
скучающий кодер   (2009-08-16 22:54) [12]

antonn, тебе просто кажется, что это не наглядно. на самом деле наглядно. ещё и как. или зачем в сишкином синтаксисе тернарный оператор?


 
antonn ©   (2009-08-16 22:55) [13]

я не использую сишный синтаксис. в пхп иногда использую, в дельфи только if then


 
DVM ©   (2009-08-16 23:00) [14]


> AndreyRus ©


> Сроду такого не видал...

Ты еще Си не видел. :) Там более увлекательно, есть == и есть =


 
скучающий кодер   (2009-08-16 23:03) [15]

а вот в VCL используется иммитация сишного тернарника, можно поискать по "array[boolean]", причём настоящий тернарник был бы только удобнее.


 
TUser ©   (2009-08-16 23:05) [16]


> причём настоящий тернарник был бы только удобнее

байт-код, наверное, еще удобнее, но вроде этот текст для людей, а компилятору ничего не будет, он железный :)


 
Petr V. Abramov ©   (2009-08-16 23:10) [17]


> Result:= С = GetChecksum(s);

я б написал Result:= (С = GetChecksum(s));
хотя скобки абсолютно необязательны.
просто для наглядности.

P.S.
if (С = GetChecksum(s)) = true then Result := true else Result := false


 
Дмитрий Белькевич   (2009-08-17 02:58) [18]


> причём настоящий тернарник был бы только удобнее.


Ну он как бы есть - IfThen. Правда, не всегда удобен, т.к. реализован как функция, а не как compliler magic, из-за чего обязательно должны высчитываться оба параметра, что есть не всегда хорошо.


> Result:= С = GetChecksum(s);


Я так пишу всегда.


 
TIF ©   (2009-08-17 03:00) [19]

> Ты еще Си не видел. :) Там более увлекательно, есть == и
> есть =

PHP круче, там есть === :)


 
test ©   (2009-08-17 05:43) [20]

DVM ©   (16.08.09 23:00) [14]
return c = c == GetChecksum(s);


 
Дмитрий С ©   (2009-08-17 07:00) [21]

А так в Си можно?


procedure TForm2.Edit1Change(Sender: TObject);
var
 Edit: TEdit absolute Sender;
begin
 Edit.SelStart := Edit.SelStart - 1;
end;

function TForm2.ContrastColor(C: TColor): TColor;
var
 Src: TRGBQuad absolute C;
begin
 if (Src.rgbBlue + Src.rgbGreen + Src.rgbRed) div 3 > 0 then
   Result := clBlack
 else
   Result := clWhite;
end;

function TForm2.SwapChanells(C: TColor): TColor;
var
 Src: TRGBQuad absolute C;
 Dst: TRGBQuad absolute Result;
begin
 Dst.rgbBlue := Src.rgbGreen;
 Dst.rgbGreen := Src.rgbRed;
 Dst.rgbRed := Src.rgbBlue;
end;



 
test ©   (2009-08-17 07:38) [22]

Дмитрий С ©   (17.08.09 07:00) [21]
lol


 
palva ©   (2009-08-17 08:44) [23]


> PHP круче, там есть === :)

Кстати да. Там следующая проверка является рутинной:
if ($res === FALSE) ...
и это оправдано, потому что там $res, являясь, к примеру, пустой строкой или нулем, не является FALSE, но при выполнении логических операций расцениваться как FALSE.


 
Дмитрий Белькевич   (2009-08-17 11:20) [24]


> А так в Си можно?


Лучше бы так и в Паскале/Делфи нельзя было ;) Хотя изредка пользую...


function TMedicalFile.Read32Float: Single;
var
Temp: Integer absolute Result;
begin
Temp := Read32;
end;


 
СовестьДМ ©   (2009-08-17 11:27) [25]


> Дмитрий С ©   (17.08.09 07:00) [21]
> А так в Си можно?

практическая проктология?


 
Kolan ©   (2009-08-17 11:32) [26]

Интересно, что когда я пишу, то у меня в голове сначала формируется конструкция вида if С = GetChecksum(s) = true then Result := true else Result := false, а потом я её превращаю в Result:= С = GetChecksum(s);. Причем часто я сначала начинаю писать вариант с if, а потом понимаю, что это идиотизм и переписываю.

Из опыта — краткая запись не вызывает проблем.


 
DVM ©   (2009-08-17 11:35) [27]


> test ©   (17.08.09 05:43) [20]
>
> DVM ©   (16.08.09 23:00) [14]
> return c = c == GetChecksum(s);

вот вот, я именно об этом.


 
Юрий Зотов ©   (2009-08-17 11:41) [28]

> Дмитрий С ©   (17.08.09 07:00) [21]

> function TForm2.ContrastColor(C: TColor): TColor;
> var
>  Src: TRGBQuad absolute C;
> begin
>  if (Src.rgbBlue + Src.rgbGreen + Src.rgbRed) div 3 > 0
> then
>    Result := clBlack
>  else
>    Result := clWhite;
> end;

Недостаточно извращаетесь, коллега. Настоящие извращенцы пишут так:
Result := BOOL ((Src.rgbBlue + Src.rgbGreen + Src.rgbRed) div 3)


 
Игорь Шевченко ©   (2009-08-17 11:48) [29]

Программу на Фортране можно написать на любом языке программирования


 
Кто б сомневался ©   (2009-08-17 12:25) [30]

Да вообще то так и надо писать.
Обычно пишут  Result := MyFunc;
а не
If MFunc then
 Result := true
else
 Result:= False

Последний вариант пишут новички, это значит что ты еще новичок.
Рекомендация - читать исходники опытных людей, к примеру vcl.


 
Дмитрий С ©   (2009-08-17 12:58) [31]


> If MFunc then
>  Result := true
> else
>  Result:= False

эта запись не аналогична предыдущей. К примеру, если myfunct возвращает тип variant и не булевское значение, а result это вариант в который нужно вернуть именно булевское значение. Можно, конечно и приведением типа, но и такая запись будет оравдана.

Можно и так
result := foo() and bar().
В •Общем• случае если foo ложно, то bar не выполниться даже.


 
@!!ex ©   (2009-08-17 13:07) [32]

> [31] Дмитрий С ©   (17.08.09 12:58)

Она еще не аналогична хотя бы потому, что константа true имеет фиксированное значение, а результат выполнения булевской функции имеет значение not false, который может и не быть равен константе true.


 
Anatoly Podgoretsky ©   (2009-08-17 13:54) [33]

И где же здесь булевская функция

Result := С = GetChecksum(s);


 
Кто б сомневался ©   (2009-08-17 14:16) [34]


> Дмитрий С ©   (17.08.09 12:58) [31]


Нет, она абсолютно аналогична примеру автора. MyFunc это и есть "С = GetChecksum(s)". Такой же порядок работы.
Все остальное несущественные мелочи реализации.


 
@!!ex ©   (2009-08-17 14:29) [35]

> [33] Anatoly Podgoretsky ©   (17.08.09 13:54)

= - это что по вашему? Не булева операция?


 
Anatoly Podgoretsky ©   (2009-08-17 14:35) [36]


> = - это что по вашему? Не булева операция?

Ай как не хорошо карты передергивать! У меня булевская функция


 
@!!ex ©   (2009-08-17 14:41) [37]

> [36] Anatoly Podgoretsky ©   (17.08.09 14:35)

Нефиг к словам цеплять. И так понятно что я имел ввиду.
функция или оператор - не имеет значения в контексте моих слов.
Если вам хочеться показать какой вы умный - делайте это на ком нибудь другом, желательно в более подходящем случае.


 
Anatoly Podgoretsky ©   (2009-08-17 14:52) [38]

> @!!ex  (17.08.2009 14:41:37)  [37]

Имеет значени, речь шла именно о функции, а оператор сравнения всегда даст результат Boolean/
И чего ты, в очередной раз, на дыбы полез, не любишь, когда тебе указывают на явные ошибки, особенно детские, так не надо открывать рот на публичных адреса и не думай, что у меня не хватит силы воли закрыть тебя на долго, я таким не страдаю и закрываю независимо от того, на кого бы наезжаешь.


 
@!!ex ©   (2009-08-17 14:52) [39]

> [38] Anatoly Podgoretsky ©   (17.08.09 14:52)

Учите матчасть:
http://ru.wikipedia.org/wiki/Булева_функция

= - это тождественная буллева функция


 
KilkennyCat ©   (2009-08-17 14:53) [40]


> Учите матчасть:

по википедии?!


 
@!!ex ©   (2009-08-17 14:58) [41]

> [40] KilkennyCat ©   (17.08.09 14:53)

Ну дайте другой источник...
Хотя вроде все что там написано соответствует тому, что нам в ВУЗе расскзаывали...


 
@!!ex ©   (2009-08-17 15:00) [42]

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


 
Anatoly Podgoretsky ©   (2009-08-17 15:08) [43]

> KilkennyCat  (17.08.2009 14:53:40)  [40]

Ага по ней и при этом делать хитрое лицо, стараясь его не испачкать.


 
@!!ex ©   (2009-08-17 15:26) [44]

> [43] Anatoly Podgoretsky ©   (17.08.09 15:08)

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


 
Anatoly Podgoretsky ©   (2009-08-17 15:30) [45]

> @!!ex  (17.08.2009 15:26:44)  [44]

Жди


 
@!!ex ©   (2009-08-17 15:38) [46]

> [45] Anatoly Podgoretsky ©   (17.08.09 15:30)

Ок. Вы мастерски подтердили свое интеллектуальное превосходство и уровень знаний.
Зачем правда вы это сделали остаеться загадкой... ведь ничего кроме издевки с вашей стороны не поступило...


 
Anatoly Podgoretsky ©   (2009-08-17 15:47) [47]

> @!!ex  (17.08.2009 15:38:46)  [46]

Кончай с наездами и не пытайся требовать ответа, это открытая конференция, каждый сам решает, писать или нет, я лично решил не тратить время, с учетом предыдущих обсуждений это пустая трата времени.

Но если хочешь, то жди.


 
Дмитрий Белькевич   (2009-08-17 15:48) [48]


> Зачем правда вы это сделали остаеться загадкой...


У слона всё равно больше.


 
SPeller ©   (2009-08-17 15:53) [49]


> ничего кроме издевки с вашей стороны не поступило

Здесь мнение мастеров - истина в последней инстанции :)


> if (С = GetChecksum(s)) = true then Result := true else Result := false

Да, хороший вариант :)


 
Anatoly Podgoretsky ©   (2009-08-17 16:25) [50]

Да трудно с вами, с гурами.


 
Дмитрий Белькевич   (2009-08-17 16:54) [51]


> Да, хороший вариант :)


Только две вещи бесконечны - Вселенная и человеческая глупость,
хотя насчёт первой я не уверен. (с) самизнаетекто.


 
@!!ex ©   (2009-08-17 16:55) [52]

> [47] Anatoly Podgoretsky ©   (17.08.09 15:47)

Да не требую я, и не наезжаю.
Мне просто не понятно зачем так делать: "В форме насмешки указывать на ошибку, и потом ничем не подтверждая своих слов продолжить насмехаться".

действительно, наверно со мной сложно спорить, потому что я не считаю что
> [49] SPeller ©   (17.08.09 15:53)
> мнение мастеров - истина в последней инстанции :)

И поэтому прошу хоть каких нибудь фактов подтверждающих ваши слова.
Не требую. А прошу. Чтобы убедиться в том, что сморозил глупость.
Вместо этого слышу обвинения в свой адрес и угрозу баном...


 
Anatoly Podgoretsky ©   (2009-08-17 16:58) [53]

Ну не будем же мы выяснять отношения в форуме.


 
DrPass ©   (2009-08-17 17:18) [54]


> Мне просто не понятно зачем так делать: "В форме насмешки
> указывать на ошибку, и потом ничем не подтверждая своих
> слов продолжить насмехаться".

Как это зачем? Унизить тебя, втоптать в грязь твои светлые чувства, смешать с дерьмом твою репутацию, и таким образом получить удовольствие


 
KilkennyCat ©   (2009-08-17 18:32) [55]


> DrPass © (17.08.09 17:18) [54]

осторожнее с объяснениями - могут подумать, что судишь по себе.


 
test ©   (2009-08-17 19:47) [56]

Anatoly Podgoretsky ©   (17.08.09 15:08) [43]
В выражении не указан не тип c, не тип GetChecksum, не тип s. Все может быть, там может быть сплошной boolean...


 
Anatoly Podgoretsky ©   (2009-08-17 19:54) [57]

> test  (17.08.2009 19:47:56)  [56]

А типы и не важны, важен оператор отношения


 
@!!ex ©   (2009-08-17 20:01) [58]

> [57] Anatoly Podgoretsky ©   (17.08.09 19:54)

Я не с потолка написал.
В 2006 году делали проект по нейросетям, и в файл надо было писать 0 для false и 1 для true.
Я в то время на первом курсе СГАУ учился и нам как раз рассказали о том, что можно вместо
if a=b then Result:=true else Result:=false;
писать Result:=a=b;

Придя на работу, я занялся как раз модификацией куска кода сохраняющего нейросеть в файл.
Увидел место в котором мной ранее было написано if then else, исправил, проверил, работает. А когда нчали прогонять авто-тесты - прога начала валиться.... Почему? Потому что вместо 1 для true, стояли в некоторых случаях другие значения. Я нехилый втык тогда получил. За дело получил, потому что надо учитывать то, как данные представляются в машине. Случай запомнил.
Именно поэтому с полной уверенность написал свое сообщение в [32]


 
Anatoly Podgoretsky ©   (2009-08-17 20:24) [59]

У тебя видимо была ошибка в другом месте, кроме того неизвестно какого типа у тебя Result и какой язык программирования.

Но оператор отношения (=) дает только два ответа, выражение истинно или ложно.
Ничего другого, иначе прекращает работать булева алгебра, которая имеет другое название логика высказываний и опирается только истинность высказывания и ни на чего больше. Для не булевых операций могут быть другие правила. Про представление я ничего не говорю, это дело внутренней реализации, но значение истина - это true, значение ложь - это false и больше никаких других значений. В Паскале реализация 1/0, в других языках могут быть другие, я встречал 0/255 (FF).

Отсюда ты получил науку, ты предположил, что оно обязательно 0/1, так как тебе представлялось и как тебе надо, но это не так. Так это в Паскале, поскольку у него встроена булева алгебра еще с начала 70 годов и как минимум с 83 года оно равно 0/1

Поэтому ты был изначально не корректен и в своей агресивной манере.

ЗЫ: что бы не быть головословным я приведу выписку из справки

The four predefined Boolean types are Boolean, ByteBool, WordBool, and LongBool. Boolean is the preferred type. The others exist to provide compatibility with other languages and operating system libraries.

A Boolean variable occupies one byte of memory, a ByteBool variable also occupies one byte, a WordBool variable occupies two bytes (one word), and a LongBool variable occupies four bytes (two words).

Boolean values are denoted by the predefined constants True and False. The following relationships hold.

Boolean ByteBool, WordBool, LongBool
False < True False <> True
Ord(False) = 0 Ord(False) = 0
Ord(True) = 1 Ord(True) <> 0
Succ(False) = True Succ(False) = True
Pred(True) = False Pred(False) = True

Ключевые моменты помечены жирным.

И мою небольшую статью по Булевой алгебре и битовой логике.

http://www.podgoretsky.com/Redir.aspx?id=137&DownloadFile=~/ddp/bits.aspx


 
@!!ex ©   (2009-08-17 20:59) [60]

Вот это место(специально код откопал) если я правильно помню:
     if ilayers<=Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Layer then
      Neuron^.Dendrits[ienters].IsRecursiveDendrit:=1
     else
      Neuron^.Dendrits[ienters].IsRecursiveDendrit:=0;

     integer(Neuron^.Dendrits[ienters].Neuron):=ShiftInLayer[Table.Layers[ilayers].Ne irons[ineirons].Enters[ienters].Layer]+Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Neiron;
     if GetTeachLayer(Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Layer,ilay ers) then
       Neuron^.Dendrits[ienters].CanTeach:=1
     else
       Neuron^.Dendrits[ienters].CanTeach:=0;

IsRecursiveDendrit и CanTeach - integer
Если подставляли само выражение и приводили к integer"у - был тот самый косяк с неверным представлением.
Следующим после этого кодом, рекорды просто сбрасываються в файл:
 FileHandle:=FileCreate(FileName);
 FileWrite(FileHandle,Memory^,integer(LastNeuron)-integer(Memory));
 FileClose(FileHandle);


 
@!!ex ©   (2009-08-17 21:04) [61]

> [59] Anatoly Podgoretsky ©   (17.08.09 20:24)

Мне не совсем понятно как Ord должен себя вести по отношению к boolean, он же вроде дя char предназначен? И параметр входной у него вроде char...


 
Кто б сомневался ©   (2009-08-17 21:06) [62]

ну так надо было объявить их как longbool (BOOL сишное). И не было бы косяка.


 
@!!ex ©   (2009-08-17 21:07) [63]

В свежей справке по 2006 дельфе, написано что boolean true - строго 1...


 
Kolan ©   (2009-08-17 21:08) [64]

Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Layer
или нет, вот даже лучше
ShiftInLayer[Table.Layers[ilayers].Ne irons[ineirons].Enters[ienters].Layer]+Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Neiron

«Красота» объектно-ориентированного программирования.

Как такое называется знаете?


 
Anatoly Podgoretsky ©   (2009-08-17 21:09) [65]

> @!!ex  (17.08.2009 20:59:00)  [60]

IsRecursiveDendrit это уже не Boolean
Кроме того разница в размерах.
Это рулетка, нельзя присваивать Boolean, кроме того при присваивании видимо будет присваивание типа Bool c автоматическим преобразованием и без сообщения об ошибке.
В общем подошли к задаче безответственно, не понимая, что творите и хорошо, что сразу обнаружили.

В итоге к обсуждению присвоения к Boolean типв это не относится, по причине отсутствия факта присваивания.


 
@!!ex ©   (2009-08-17 21:15) [66]

> [64] Kolan ©   (17.08.09 21:08)

У тебя есть идеи как построить нейронную сеть лучше? Поделишься?


> [65] Anatoly Podgoretsky ©   (17.08.09 21:09)

Имелось ввиду вот так:
Neuron^.Dendrits[ienters].IsRecursiveDendrit:=ilayers<=Table.Layers[ilayer s].Neirons[ineirons].Enters[ienters].Layer;


 
@!!ex ©   (2009-08-17 21:16) [67]

Neuron^.Dendrits[ienters].IsRecursiveDendrit:=integer(ilayers<=Table.Layers[ilay er s].Neirons[ineirons].Enters[ienters].Layer);


 
Anatoly Podgoretsky ©   (2009-08-17 21:26) [68]


> @!!ex ©   (17.08.09 21:15) [66]

Я понял как делали, эти грабли вы сами себе расставили

Boolean := a <= B; - это правильно и это всегда работает
Integer := a <= B;
или
Bool := a <= B;  работает только для False, для True это значение от единицы до максимального значения.

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

Примерно в тоже время, на предположение об конкретном значение TRUE для Bool погорело много Си программистов, те которые считали, что True это 1, некоторые рабочие программы стали давать странные результаты, оказалось что какие то функции стали возвращать -1. Что тоже TRUE. все из-за того, что эти программисты тоже не читали, что такое Bool

Твой случай из этой оперы и зря ты на меня наехал.


 
@!!ex ©   (2009-08-17 21:33) [69]

> [68] Anatoly Podgoretsky ©   (17.08.09 21:26)

В том сообщении что я комментировал - не был определен тип Result.

реакция моя немного агрессивная связана с насмешливым тоном указывающим на ошибку. Сорри.


 
Anatoly Podgoretsky ©   (2009-08-17 21:58) [70]

А ведь началось с "И где же здесь булевская функция", вместо признания, ты начал юлить.


 
@!!ex ©   (2009-08-17 22:03) [71]

> [70] Anatoly Podgoretsky ©   (17.08.09 21:58)

Ок. Считаем что там нет булевской функции. Досадно опечатался.


 
Andy BitOff ©   (2009-08-17 22:05) [72]

А я вот, тоже в справку не заглядывал, однако, всегда считал, что False = 0, а True <> 0. А чему уж оно будет там равно, это уж по барабану, т.к. однозначно False = 0. И даже не возникало желания заглянуть в справку. Уж откуда это пошло и не упомню.


 
Andy BitOff ©   (2009-08-17 22:07) [73]

Удалено модератором


 
Andy BitOff ©   (2009-08-17 22:08) [74]

Удалено модератором


 
Anatoly Podgoretsky ©   (2009-08-17 22:11) [75]

> @!!ex  (17.08.2009 22:03:11)  [71]

А у меня больше претензий и не было :-)


 
Anatoly Podgoretsky ©   (2009-08-17 22:17) [76]

> Andy BitOff  (17.08.2009 22:05:12)  [72]

Я тут упоминал предыдущие обсуждения, так вот там к аналогичному выводу пришли и методика присвоения должна быть такая

Вместо A := Expr писать A := expr <> False; где Expr типа Bool


 
Кто б сомневался ©   (2009-08-17 22:35) [77]

Молодой еще сможет сказать да я ошибся здесь, но вот не совсем молодой (за 30-35)...
Даже если он ошибся на публике, то он строго будет придерживатся своей неправильной точки зрения, придумывать новые левые аргументы.. Даже если ему дать неопровержимые факты. Так было с И.Шевченко когда-то. :) И часто такое встречается на просторах сети.
Я не знаю почему, такова психология таких людей..


 
Кто б сомневался ©   (2009-08-17 22:35) [78]

Я имел ввиду программистов.


 
Kolan ©   (2009-08-17 22:37) [79]

Да нейронная или не нейронная сеть или не сеть мне кажется тут не так уж важно. Посмотрите запах Message Chains.


 
Дмитрий Белькевич   (2009-08-17 23:29) [80]


> Мне не совсем понятно как Ord должен себя вести по отношению
> к boolean, он же вроде дя char предназначен? И параметр
> входной у него вроде char...


Returns the ordinal value of an ordinal-type expression.

Ordinal type не только char.


> Я не знаю почему, такова психология таких людей..


Ну это известная особенность. И "такие" - не только программисты.


> Да нейронная или не нейронная сеть или не сеть мне кажется
> тут не так уж важно.


Не знаю, каким именно методом, но нужно определенно с этим что-то делать, т.к. сильно говнокодом попахивает...


 
@!!ex ©   (2009-08-17 23:33) [81]

> [80] Дмитрий Белькевич   (17.08.09 23:29)

Типа у вас нигде в проектах тройной вложенности не встречаеться?


 
Kolan ©   (2009-08-17 23:40) [82]

@!!ex, ну согласитесь это Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Layer сложно прочесть.

В таблице есть слои в слое нейроны в нейроне входы во входе слой — возможно правильная иерархия, но это не значит, что к ней надо так сложно обращаться. Вероятно можно сократить это цепь.


 
@!!ex ©   (2009-08-17 23:47) [83]

> [82] Kolan ©   (17.08.09 23:40)

Честно говоря не помню уже. Возможно. Я тогда только начинал нормально программировать.


 
test ©   (2009-08-18 09:55) [84]

@!!ex ©   (17.08.09 23:33) [81]
with(Table.Layers[ilayers])do
begin
....
end;
Не то? А функцией оформить?


 
Kolan ©   (2009-08-18 10:26) [85]

Нет, test, with"ом плохому запаху не поможешь.


 
@!!ex ©   (2009-08-18 10:40) [86]

На форуме все так умело обсуждают, каким должен быть код... А как на реальные проекты посмотришь... :)))))


 
Anatoly Podgoretsky ©   (2009-08-18 11:12) [87]

> @!!ex  (18.08.2009 10:40:26)  [86]

Человек слаб.


 
Anatoly Podgoretsky ©   (2009-08-18 11:17) [88]


> @!!ex ©   (18.08.09 10:40) [86]

Кстати ты постоянно ищешь оправдание на уровне "сам дурак", поэтому к тебе так много претензий, единственно, что тебя не так сильно бьют как других, поскольку есть потенциал.


 
@!!ex ©   (2009-08-18 11:31) [89]

> [88] Anatoly Podgoretsky ©   (18.08.09 11:17)

Не ищу я оправданий. Этот код в 2006 году писал, тогда еще мало опыта было. Да и сейчас я знаю, что в коде есть проблемы.
Собственно я поэтому периодически прошу более опытных товарищей Code Review проводить, и сюда периодически выкладываю код. Потому что прекрасно понимаю, как далеко мне до идеала, которому я очень хочу соответствовать. :)
Комментарий в [86] он вызван именно удивлением о несоответствии слов людей с тем, как они реально прогают...


 
Anatoly Podgoretsky ©   (2009-08-18 12:31) [90]

> @!!ex  (18.08.2009 11:31:29)  [89]

Да часто код старый, а подход к написанию постоянно меняется, по мере роста опыта, ну и человек существо слабое - все себе прощает.


 
Дмитрий Белькевич   (2009-08-18 14:22) [91]


> Типа у вас нигде в проектах тройной вложенности не встречаеться?


В своём коде - двойной почти нигде нет. With/функции часто использую. Специально для With пообзывал многие переменные по-разному, что бы в блоках with каши не было. with вложенность по 2-3 и больше бывает. Изредка баги из-за этого проскакивают, сразу переименовываю переменные.

Да и рефакторинг иногда полезен. Бывает, видно, что большой блок работает исключительно с данными строннего объекта. Так лучше в класс того объекта всё и перенести, чем делать лесницу из with или создавать нечто типа этого: "Table.Layers[ilayers].Neirons[ineirons].Enters[ienters].Layer".


> Нет, test, with"ом плохому запаху не поможешь.


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


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


Я, обычно, где-то раз в полгода-год (обычно, когда следующую бэту начинаю, что бы заодно уж всё оттестировать) перетряхиваю исходники.

Но это, конечно, проекты должны быть долгими (нашим уже 7 лет почти) и не аутсорсными. Т.к. врятли кто-то будет Hello World постоянно "причёсывать", как и аутсорс.



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

Форум: "Прочее";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.7 MB
Время: 0.008 c
2-1250692255
Б
2009-08-19 18:30
2009.10.18
Перемещение курсора.


15-1250675891
Yurikon
2009-08-19 13:58
2009.10.18
Контроль за использованием памяти


2-1250445565
alvonen
2009-08-16 21:59
2009.10.18
TOP_MOST окно перекрывается другими


2-1250069179
AlexDan
2009-08-12 13:26
2009.10.18
Распечатать три memo..


2-1250324076
namco
2009-08-15 12:14
2009.10.18
excel и delphi





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