Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1245789024
Юрий
2009-06-24 00:30
2009.08.23
С днем рождения ! 24 июня 2009 среда


3-1226375636
Grain
2008-11-11 06:53
2009.08.23
Проверка на блокировку записи


15-1245816012
Дмитрий С
2009-06-24 08:00
2009.08.23
Поиск точки


2-1245834432
Worldmen
2009-06-24 13:07
2009.08.23
Редактирование отчета FastReport в программе


6-1205792707
cerber
2008-03-18 01:25
2009.08.23
Twebbrowser and Newwindow





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