Форум: "Прочее";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
ВнизСуществует в Дельфи функция IIF ? Найти похожие ветки
← →
Пит (2009-06-24 14:07) [40]напрягаться? Ну хз, в реальном проекте я этот кусок кода написал за пару минут не более. Это, видимо, еще один плюс данного подхода.
Мне уже и так советовали, и так советовали. Но никто не желает переписать пример в [28] )))
Давайте если будет пример - обсудим. А так какая-то чистая теория получается.
← →
AndreyV © (2009-06-24 14:18) [41]> [39] ANB (24.06.09 14:04)
> Жуть.
> 1) У ПИТа все намного легче читается.
> 2) Тут еще придется репу чесать - а как оно в виде HTML
> получиться.
Куда-то сообщение пропало. Повтор.
А когда много вложенных по условию тэгов будет - линейный подход не пройдёт, нет, он конечно пройдёт, но я не завидую.
← →
AndreyV © (2009-06-24 14:20) [42]> [40] Пит (24.06.09 14:07)
> Давайте если будет пример - обсудим. А так какая-то чистая
> теория получается.
Давайте подождём, я вроде четко выразился.
← →
Пит (2009-06-24 14:26) [43]
> А когда много вложенных по условию тэгов будет - линейный
> подход не пройдёт
брр... А где вообще сказано, что надо писать в одну линию весь код? Думаем... и делаем:
HTML := HTML + Format(
"<table border=0>"
+"<tr class="%s">"
+"<td>Еханный бабай</td><td>%s</td>"
+"</tr>"
+"<tr class="%s">"
+"<td>Где бабай?</td><td>%s</td>"
+"</tr>"
+"</table>",
[...]);
Конечно, в WEB-ориентированных языках это смотрелось бы красивее... Но впрочем я жду опять же твоего более читабельного аналога.
← →
Пит (2009-06-24 14:34) [44]На самом деле, видно, что я не изобретал ничего нового. Это стандартный подход форматирования в том же PHP, он реально удобен, доказано тысячами программистов по всеми миру. И собственно он соответствует логике выдаваемого документа.
Только в PHP не было бы постоянных плюсов и открывания, закрываний строк. И имена переменных указывались бы прямо в тексте, а не в конце функции Format. Да и самой функции Format не было бы, она встроена на уровне языка. Было бы аля (точно за правильность не ручаюсь, подзабыл уже):
HTML = HTML.
"<table border=0>
<tr class=$trClass>
<td>Еханный бабай</td><td>$Title</td>
</tr>
<tr class=$trClass>
<td>Где бабай?</td><td>$Desc</td>
</tr>
</table>" ;
Более удобно я просто не представляю как. Четко видно, что собственно этот же подход я и использую, только с немного портящим картину синтаксисом Delphi.
← →
AndreyV © (2009-06-24 14:35) [45]> [43] Пит (24.06.09 14:26)
> брр... А где вообще сказано, что надо писать в одну линию
> весь код? Думаем... и делаем:
>
> Конечно, в WEB-ориентированных языках это смотрелось бы
> красивее... Но впрочем я жду опять же твоего более читабельного
> аналога.
Странный спор ты тему не забыл:). Ну смотри:
HTML := HTML + Format(
"<table border=0>"
+"<tr class="%s">"
если не бабай то
+"<td>опайка из десяти строк</td><td>%s</td>"
иначе
+"<td>Еханный бабай</td><td>%s</td>"
+"<td>опака из десяти строк</td><td>%s</td>"
+"</tr>"
+"<tr class="%s">"
+"<td>Где бабай?</td><td>%s</td>"
+"</tr>"
+"</table>",
[...]);
← →
Пит (2009-06-24 14:47) [46]AndreyV, я тему не забыл, я отвечал на твой странный коммент, что все "линейно".
Насчет твоего примера в [45]... А с каких пор внутри функции Format можно использовать условные операторы?
Ты как бы разделяй... Если ты хочешь повогорить об общей бесполезности IfThen - то перепиши пример [28] плиз.
Пример в [43] лишь демонстрация того, что проблема:
> А когда много вложенных по условию тэгов будет - линейный
> подход не пройдёт, нет, он конечно пройдёт, но я не завидую.
>
проблемой вовсе не является.
← →
AndreyV © (2009-06-24 14:59) [47]> [46] Пит (24.06.09 14:47)
> AndreyV, я тему не забыл, я отвечал на твой странный коммент,
> что все "линейно".
>
> Насчет твоего примера в [45]... А с каких пор внутри функции
> Format можно использовать условные операторы?
Я показал пример дублирования и пользу функционального программирования в этом примере. Ты не увиливай.
О переписывании я ответил, вроде понятно, и не в две минуты это выльется.
← →
Пит (2009-06-24 15:08) [48]Ладно, демагогия пошла.
Если будет альтернативный, по твоему мнению более читабельный аналог - давай обсудим. Пока только все говорят, что плохо, но никто не написал как лучше. У всех "нет времени", хотя многие имхо уже потратили куда больше времени, чем заняло бы переписывание... Впрочем, ладно.
лично я не спешу, за веткой слежу. Можно продолжить обсуждение в любое время (пока файловый движок этого форума не грохнет из-за "оптимизации" ветку), мне самому интересно.
← →
Иа (2009-06-24 16:17) [49]
> HTML := Format(
> "<html><MyTag1><MyTag2>%s</MyTag2></MyTag1></html>",
> [...]);
>
> Эта запись будет наверняка куда привычнее людям, которые
> работают с HTML и полюбому в свое время писали в том же
> блокноте.
Так мы про html программистов или про дельфистов? Либо одно либо другое. То что у тебя написано - так действительно писали когда то в php или старом asp. С точки зрения дельфиста или дотнета - это кошмарный код который не стоит показывать что бы не засмеяли. К примеру, если завтра понадобится добавить javascript в конец для трэккера - ты будешь искать все места где ты вставляешь /html? Или будет требование к xhtml - будешь чистить и смотреть как бы где не ошибся с тагом? Какая у тебя валидация производимого html? Где гарантия или хотя бы частичная уверенность что ты нигде в своем коде не опечатался и не забыл кавачки? Это для тестера работа или ты юниттесты пишешь на каждый случай? Мы пишем на обьектных языках - так пользуйся средствами которые тебе на халяву дают
Я бы сделал примерно так на C#
void Foo(Stream outputStream)
{
using (html(outputStream))
{
using (body(outputStream))
{
WriteTag("MyTag1", value);
WriteTag("MyTag2", value);
}
}
}
← →
Пит (2009-06-24 16:33) [50]
> Я бы сделал примерно так на C#
так мы про дельфи программистов или про шарпщиков? )))
Перепиши на дельфи, пожалуйста, мне так понятнее будет. Плюс не надо элементарный пример, перепиши плиз функционал примера [28] - именно о нем идет речь. Он ведь коротенький.
> так действительно писали когда то в php
а сейчас так в PHP не пишут? А как бы сейчас в PHP переписали бы пример из [44], ну или можно тот же [28]?
← →
Иа (2009-06-24 17:54) [51]
> > Я бы сделал примерно так на C#
>
> так мы про дельфи программистов или про шарпщиков? )))
То что разницы нет ты не понял?
> Перепиши на дельфи, пожалуйста, мне так понятнее будет.
> Плюс не надо элементарный пример, перепиши плиз функционал
> примера [28] - именно о нем идет речь. Он ведь коротенький.
Я на делфи не пишу уже. Не понятен пример? А, дошло, кажется. Сколько ты программируешь профессионально?
Stream result
using (new tr(result))
{
writeTag(new td(result, FPropertyList[i]));
using (new td(result)
{
writeTag(new textInput(result, FPropertyList.Keys[i], DBFieldAsText(q, i), PropInfo.HTMLSize));
}
}
Главный пойнт в том что операций над строками в приложении должно быть как можно меньше - и по возможности их надо выносить в маленькие куски где легче править и отлаживать. В данном случае в коде самого приложения таких операций нет вообще. Захочу - положу шаблоны в базу. Захочу - буду брать из файла. Захочу - сделаю многоязычное приложение а основной код этого и не заметит - для него все прозрачно.
Для классов тэгов пишутся unit tests и имеем если не гарантированное отсутствие ошибок то по крайней мере их количество будет несравненно меньше чем пр размазанном string concatenation по твоему коду.
>
> > так действительно писали когда то в php
>
> а сейчас так в PHP не пишут? А как бы сейчас в PHP переписали
> бы пример из [44], ну или можно тот же [28]?
В 5.0 появилась приличная поддержка OOP. А что касается как то зависит от программиста. Пословицу про программу на фортране знаешь?
← →
Пит (2009-06-24 18:35) [52]10 минут думал, что отвечать. Могу ввязаться в дискуссию, но это бесполезный флуд страниц на 5 выйдет. То, что ты крут у меня вопросов не вызывает.
Что касается меня - обойдусь малым. Поскольку пишу на дельфи, то с радостью увидел бы красивый, "читабельный" аналог примера из поста [28] на том же самом дельфи.
← →
Иа (2009-06-24 18:58) [53]Про стаж вопрос был не в обиду - хотелось понять на каком уровне разговаривать. в любом случае учись читать и понимать код на разных языках. А что касается самого вопроса - все что мог сказать я сказал. Если ты не видишь разницы между подходами - ничего не могу поделать. радуйся что ты не у меня в команде :)
← →
Пит (2009-06-24 19:16) [54]
> Про стаж вопрос был не в обиду - хотелось понять на каком
> уровне разговаривать
ну да, конечно. У тебя есть умение по трудовой книжке и стажу угадывать степень профессионализма человека.. Сам то веришь?
Такой вопрос в интернете задается исключительно для понтокидательства. Точно также как вопрос о возрасте человека - это вообще самый примитивный способ поиска аргументов в свою пользу.
Задавая такой вопрос ожидается, что ответ в количественном виде будет меньше, чем у самого задающего. Это подсознательный способ убеждения самого себя в собственной правоте. Вопрос о стаже задается строго тогда, когда есть уверенность, что собственный стаж выше опонента и хочется подтверждения. Вопрос о возрасте задается в таких же случаях.
При этом опять же подсознательно имеется в виду, что если выше возраст (стаж), то значит ты больше разбираешься в вопросе. Несмотря на то, что при прямом обсуждении вопроса зависимости Скила от Возраста почти каждый может привести обратные примеры, что некто в 40 лет тупее 20-ти летнего.
Впрочем, психика логике не подчиняется, поэтому на самом деле результат ответа особо ничего не изменит, человек хочет верить, что прав и ищет любые, пусть даже косвенные, подтверждения своей правоты, которые, возможно, в другой ситуации он сам бы засмеял.
Если ответ будет ожидаемым, то реакция аля "Ну я так и знал, мал ты еще", если ответ будет не ожидаемым (например, оказывается стаж опонента выше собственного), реакция будет в стиле "Странно, такой большой, а ничему не научился". Ни подход, ни мнение это не поменяет.
← →
Пит (2009-06-24 19:31) [55]Да и все фразы пестрят штампами... Хоть разбирай:
> Про стаж вопрос был не в обиду - хотелось понять на каком
> уровне разговаривать
ага, хотелось понять. Можно подумать, что от этого понимания зависит степень признания того или иного кода правильным. Если у меня стаж 1 год - ты согласишься, что формировать HTML правильно таким-то образом. А если стаж 10 лет - ты скажешь, что формировать HTML правильно иным способом? ))))
> в любом случае учись читать и понимать код на разных языках
неплохой наезд. Не учтено только одно - ты сам не можешь написать простейший код на дельфи )) И вот в этом свете нравоучения насчет "учись, учись" уже вызывают улыбку ))
В дельфи нет шаблонов, в дельфи нет автоматической сборки мусора, в дельфи достаточно много чего нету. поэтому единственный способ гарантировано закрыть открытый тег другим оператором - это использования блока try.. finally аля:s := s + "<tr>";
try
...
finally
s := s + "</tr>";
end;
Или если угодно:OpenTag(blabla);
try
...
finally
CloseTag ;
end;
если писать в таком стиле - это будет нихрена не читабельно.
> Если ты не видишь разницы между подходами - ничего не могу
> поделать
я то вижу разницу в подходах. А вот ты когда выгодно - видишь ее, когда не выгодно - не видишь.
Вот пример, когда тебе выгодно:>Так мы про html программистов или про дельфистов? Либо одно либо другое
А вот на мой стёб в ответе тебе уже другое выгодно:> так мы про дельфи программистов или про шарпщиков? )))
То что разницы нет ты не понял?
Значит, когда HTML программисты и дельфи программисты - это ой как разное. А когда дельфи программисты и C# программисты - это ясен пень одинаковое...
Много мог бы написать, надоело )
← →
Пит (2009-06-24 19:35) [56]блин, все таки неударжался я ))) надо было заканчивать на посте [52]. Больше не буду, можешь сделать вид, что дальнейших постов я не писал.
Итог флейма один - если кто готов на ДЕЛЬФИ переписать пример более грамотно из [28] - я реально бы посмотрел с вниманием.
← →
Иа (2009-06-24 21:17) [57]
> > так мы про дельфи программистов или про шарпщиков? )))
> То что разницы нет ты не понял?
>
> Значит, когда HTML программисты и дельфи программисты -
> это ой как разное. А когда дельфи программисты и C# программисты
> - это ясен пень одинаковое...
То есть не понял. ну ладно. дальнейшую дискуссию с тобой можно считать закрытой.
← →
Пит (2009-06-24 23:01) [58]Ух, ну вот и здорово )))
Ждем знатоков, которые умеют не только читать дельфи код, но и писать его )) (извините, не удержался )) ), красиво перепишущих [28]
← →
Kerk © (2009-06-24 23:13) [59]Ну вообще товаристч абсолютно прав по сути. Каша в виде смеси программного кода и html-кода по определению плохо читаема. Потому даже в том же PHP используют шаблонные движки. Если в VCL нет шаблонов, это не значит, что не нужно разделять код и представление.
← →
Пит (2009-06-24 23:20) [60]
> Каша в виде смеси программного кода и html-кода по определению
> плохо читаема
с одной стороны я вроде как с тобой согласен.
С другой стороны, очевидной фишкой PHP является как раз прозрачное слияние html-кода и программного кода.
А еще можно учесть то, что существует и все более используется JavaScript... А это вообще, вроде как бы и часть HTML, а вроде бы и программа. Слишком все переплелось...
← →
antonn © (2009-06-24 23:25) [61]
> С другой стороны, очевидной фишкой PHP является как раз
> прозрачное слияние html-кода и программного кода.
очень сомнительная фишка и у меня вызывает неприязнь
← →
Пит (2009-06-25 12:18) [62]
> очень сомнительная фишка и у меня вызывает неприязнь
Ну как сказать... Ведь сейчас по новым тенденциям HTML это всего лишь логическое представление данных, то есть это сам по себе каркас, можно сказать "код".
А вот представление - это уже стили, CSS... Так что тут не все однозначно.
← →
Бурундук (2009-06-25 13:17) [63]2Пит (24.06.09 19:35) [56]
>Мне уже и так советовали, и так советовали.
>Но никто не желает переписать пример в [28] )))
>Давайте если будет пример - обсудим.
>А так какая-то чистая теория получается.
Я бы, вероятно, написал что-нибудь в таком духе:
Result := Result + GetBlockClass(PropInfo.tp).GetBlockText(PropInfo, FPropertyList, i, q);
...
class function TInputTextBlock.GetBlockText(PropInfo, FPropertyList, i, q): string; // override;
var Caption, Name, Value, SizeAttr, MaxLengthAttr: string;
function OptionalAttr(const Name: string; Value: Integer): string;
begin
if Value = 0 then
Result := "";
else
Result := Name + "=" + IntToStr(Value);
end;
begin
Caption := FPropertyList.ValueFromIndex[i];
Name := FPropertyList.Names[i];
Value := HTMLtoSpecialChars( DBFieldAsText(q, i) );
SizeAttr := OptionalAttr("size", PropInfo.HTMLSize);
MaxLengthAttr := OptionalAttr("maxlength", PropInfo.HTMLMaxLength);
Result := FormatMy("<tr><td>%s</td><td><input type=text name="%s" value="%s" %s %s /></td></tr>",
[Caption, Name, Value, SizeStr, MaxLengthStr]);
end;
← →
Пит (2009-06-25 13:32) [64]
> Caption := FPropertyList.ValueFromIndex[i];
> Name := FPropertyList.Names[i];
> Value := HTMLtoSpecialChars( DBFieldAsText(q, i) );
>
> SizeAttr := OptionalAttr("size", PropInfo.HTMLSize);
> MaxLengthAttr := OptionalAttr("maxlength", PropInfo.HTMLMaxLength);
>
>
> Result := FormatMy("<tr><td>%s</td><td><input type=text
> name="%s" value="%s" %s %s /></td></tr>",
> [Caption, Name, Value, SizeStr, MaxLengthStr]);
Ну фиг знает... Ты реально считаешь это более читабельным, чем [28]? Просто введена куча переменных, которые и подставлены в функцию Format... Чем это читабельнее? Просто если формирование большое, ахренеешь от секции объявления переменных...
>MaxLengthAttr := OptionalAttr("maxlength", PropInfo.HTMLMaxLength);
а это вообще без комментариев. Введена функция, которая по функционалу более ограничена, чем существующая функция IfThen.
Твой вариант:function OptionalAttr(const Name: string; Value: Integer): string;
begin
if Value = 0 then
Result := "";
else
Result := Name + "=" + IntToStr(Value);
end;
SizeAttr := OptionalAttr("size", PropInfo.HTMLSize);
А мой вариант этой же записи:SizeAttr := IfThen( PropInfo.HTMLSize>0, "size" + IntToStr(PropInfo.HTMLSize) );
В твоем варианте не надо будет каждый раз условие прописывать (>0), с другой стороны такое встречается два раза в коде всего у меня, но опять же пока.
И вот есть смысл вводить функцию или нет... По-моему, вопрос начинает упираться в "какой цвет лучше зеленый или красный"...
← →
Бурундук (2009-06-25 15:01) [65]>Ты реально считаешь это более читабельным, чем [28]
Я считаю более читабельным
Result := Result + GetBlockClass(PropInfo.tp).GetBlockText(PropInfo, FPropertyList, i, q);
чем
case PropInfo.tp of
{далее много кода}
Ну а на счёт метода TInputTextBlock.GetBlockText -
понятно же, что он делает. Чего ещё?..
Переменные введены просто для того, чтобы назвать вещи
своими именами. Это существенно для читабельности.
>Просто если формирование большое, ахренеешь от
>секции объявления переменных...
Я сильно подозреваю, что в этом случае охренеешь
и без неё. Тут нужны радикальные меры.
>а это вообще без комментариев. Введена функция, которая
>по функционалу более ограничена, чем существующая функция IfThen.
Ну и что? Замена функции OptionalAttr на IfThen сэкономит тебе
несколько строк кода. Но разве код от этого станет более понятным?
Вобщем, моё мнение таково: если функция IfThen позволяет
улучшить читабельность некоторого кода (что вполне возможно),
то сам этот факт характеризует данный код не с лучшей стороны.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.007 c