Форум: "Прочее";
Текущий архив: 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]
> Учите матчасть:
по википедии?!
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.007 c