Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 35 36 37 38 39 40 41 42 [43] 44   вперед  Ctrl
 Re: Топик "как я лажанулся"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3326
rgreat, ain-2, delphinotes,

а потом автоформат, и все красивости уйдут в гору :) и, да, вот такое - с разными пробелами между присвоениями, потом искать непросто.
4 июн 19, 10:59    [21901299]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3326
Gator
makhaon
я у себя решаю проблемы с with довольно просто: крайне желательно, что бы все переменные в блоке with не имели общеупотребительного названия (Caption, Text, Left, Right), а так же имели максимально уникальные имена. Примеры: OvlCaption, OvlText, ShowRefOvl, и т п.

думаю, что это небольшая плата за красоту кода:
IMHO муторно это


всё относительно. потом оно и вообще удобнее - сразу видно где чьё поле и багов минимум. Если уж совсем лень думать, то можно префиксами ограничиться.
4 июн 19, 11:02    [21901305]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
rgreat
Member

Откуда:
Сообщений: 5211
makhaon
rgreat, ain-2, delphinotes,

а потом автоформат, и все красивости уйдут в гору :) и, да, вот такое - с разными пробелами между присвоениями, потом искать непросто.
Отключен напрочь! ;)
4 июн 19, 12:21    [21901411]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
rgreat
Member

Откуда:
Сообщений: 5211
А искать через "xxx :=" довольно ненадежный метод.

Лучше через ctr+shift+enter.
4 июн 19, 12:22    [21901416]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3326
rgreat,

еще форматирование за компьютер делать нафиг-нафиг.

автор
Лучше через ctr+shift+enter.


если бы стабильно работало.
4 июн 19, 12:48    [21901451]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11154
makhaon
 with Result, SequenceItems[Index] do
Вообще смерть
4 июн 19, 15:43    [21901648]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ain-2
Member

Откуда:
Сообщений: 663
delphinotes
ain-2
А у меня привычка писать вот так (я про выравнивание):

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

Я пишу на Лазарусе.
Если нужно найти по всем исходникам, то это вообще без проблем - Ctrl-Shift-F.

Работает отлично.

Автоформат - изыди чудище обло, озорно, огромно, стозевно и лаяй.
5 июн 19, 06:02    [21902055]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 701
Нарвался на вызов API, когда передавал в функцию имя файла с русскими буквами. В WinXP - все ОК, в >= Vista - плохо.
Методом перебора шаманских бубнов глюк был обойден: имя файла перед передачей в функцию следует перекодировать в utf8, если текущая ОС новее WinXP.
Приложение (и функция) - не-юникодные.

Подробности - позже.
12 июн 19, 21:22    [21907460]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
alekcvp
Member

Откуда:
Сообщений: 1485
ёёёёё
Нарвался на вызов API, когда передавал в функцию имя файла с русскими буквами. В WinXP - все ОК, в >= Vista - плохо.
Методом перебора шаманских бубнов глюк был обойден: имя файла перед передачей в функцию следует перекодировать в utf8, если текущая ОС новее WinXP.
Приложение (и функция) - не-юникодные.


хххА() - функции WinAPI, которые требуют UTF-8?.. Это что-то новое.
13 июн 19, 10:43    [21907736]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11154
alekcvp
хххА() - функции WinAPI, которые требуют UTF-8?.. Это что-то новое.
Где?
https://docs.microsoft.com/ru-ru/windows/desktop/LearnWin32/working-with-strings
Windows represents Unicode characters using UTF-16 encoding, in which each character is encoded as a 16-bit value. UTF-16 characters are called wide characters, to distinguish them from 8-bit ANSI characters.

.........

When Microsoft introduced Unicode support to Windows, it eased the transition by providing two parallel sets of APIs, one for ANSI strings and the other for Unicode strings.
Про UTF-8 ни слова
13 июн 19, 15:00    [21907984]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11154
alekcvp
Это что-то новое.
Ой. Извини. Не так прочитал твой комментарий. Наезд снимается
13 июн 19, 15:01    [21907985]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
Довелось недавно поработать с большими текстовыми файлами гигабайтных размеров (json, csv, excel). Было всё очень печально -- все делфи библиотеки и код, которые раньше всегда использовал и которые всё это нагенерировали -- ВНЕЗАПНО перестали работать и вылетать с out of memory (либо работать бесконечно долго). Текстовые редакторы типа notepad++, эксели -- тоже зависали напрочь.

С библиотеками частично решилось (где можно было -- данные разбивались на части, где нельзя -- писались обработки через потоки). А вот с просмотром и редактированием файлов в винде -- грусть-печать.

Нашел на stackoverflow про редактор EmEditorю Это прямо магия какая-то и откровение. Открытие и показ данных -- мгновенно; пролистывание в любое место файла -- мгновенно; редактирование -- без каких-либо тормозов; он даже csv-таблицы мгновенно грузит и перелистывает. И всё это на огромных файлах.
31 авг 19, 11:05    [21961047]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
softwarer
makhaon
у себя в коде насчитал около 1000 вхождений with, за всё время ну наверно 3 или 4 проблем, которые почти сразу вылезли и поправлены.

Основная неприятность with связана с тем, что при смене версий дельфы возможна ситуация, когда в стандартный класс добавляется свойство, имя которого совпадает с локальной переменной, ранее использованной внутри with. С точки зрения дизайна языка, пожалуй, было бы лучше, если бы обращение шло, например, через точку:

with Form1 do
  .Caption := 'Abcde';


Но это, в общем, мелочи. А что до вышеописанного случая... а кто будет тесты писать, Пушкин?

По мне так главная проблема with -- это когда всякие стандартные вызовы типа "Free", "Close", "Open", "Next" и т.п. используются и применяются не к тем объектам. В молодости использовал with для работы с датасетами, как это было во многих книжках/статьях/примерах. Но как только несколько раз нарвался на ошибки при вложенных with -- отказался (да, кода чуть больше писать/копипастить, зато понятно и без ошибок).
31 авг 19, 11:14    [21961049]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3326
поэтому крайне желательно не использовать в with 'стандартные' названия, и всё будет ок.
31 авг 19, 11:22    [21961051]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58454
Блог
JaDi
ошибки при вложенных with

Ну что я могу сказать... Одна девочка съела десять пачек лекарств, и ей стало плохо. Когда она выздоровела, то решила больше никогда лекарств не принимать.
31 авг 19, 11:29    [21961054]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
makhaon,

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

Похожая проблема, кстати, и с вложенными процедурами/функциями. Там она даже намного более серьезная -- когда пишется или копипастится код, то часть локальных переменных может быть забыта для объявления и возьмется уже из родительской. При этом делфи никаких предупреждений не кинет и всё скомпилирует.

procedure baseProc;
var
  I: Integer;
  data: string;

  function childProc: String;
  begin
    // пишем/копипастим стандартный код и ловим невидимые баги из-за пропущенного var
   for I := 1 to 10 do
   begin   
     //     
   end;   
  end;

begin
  for I := 0 to 100 do
  begin
    data := childProc;
  end;
end;
31 авг 19, 11:37    [21961057]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58454
Блог
JaDi
никогда не знаешь, какой код будет вставлен внутри блока с with

Пьяный программист своему коду не хозяин (тм)

JaDi
Похожая проблема, кстати, и с вложенными процедурами/функциями. Там она даже намного более серьезная -- когда пишется или копипастится код, то часть локальных переменных может быть забыта для объявления

А ещё более серьёзная проблема с классами - вместо необъявленной локальной переменной в методе подхватывается член класса. Давайте из-за этого не будем пользоваться классами.

JaDi
-- вроде в другом месте/проекте точно такой же кусок отлично работает

Ты дал хорошую иллюстрацию тому, что я делаю практически всю свою жизнь, но что трудно объяснить посторонним. Я не беру на работу программиста, каким бы опытным и знающим он ни был, если вижу, что он привык "шаманить". Потому что у него нет привычки владеть и управлять своим кодом, он работает с ним примерно как туземец с самолётом - а если здесь нажать, что будет? И с тем, что он выдаёт, постоянно случаются подобные неприятности.
31 авг 19, 11:51    [21961059]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
softwarer,

ШОК! Программисты пользуются копи-пастом. Добро пожаловать в реальный мир.
31 авг 19, 11:55    [21961060]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58454
Блог
JaDi
ШОК! Программисты Криворучки пользуются копи-пастом.
31 авг 19, 11:58    [21961061]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
softwarer
А ещё более серьёзная проблема с классами - вместо необъявленной локальной переменной в методе подхватывается член класса. Давайте из-за этого не будем пользоваться классами.

Либо ты неумелый тролль, либо человек, далекий от программирования. Хотя бы подождал бы что ли несколько страниц, пока не утихли страсти по наименованию локальных переменных, полей и параметров.
31 авг 19, 12:06    [21961062]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
sql2012
Member

Откуда: РФ
Сообщений: 687
JaDi

procedure baseProc;
var
  I: Integer;
  data: string;

  function childProc: String;
  begin
    // пишем/копипастим стандартный код и ловим невидимые баги из-за пропущенного var
   for I := 1 to 10 do
   begin   
     //     
   end;   
  end;

begin
  for I := 0 to 100 do
  begin
    data := childProc;
  end;
end;


А что, разве такой код скомпилируется при стандартных настройках? Или "дано просто так, как пример"?

 For loop control variable must be simple local variable
31 авг 19, 12:35    [21961071]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
sql2012
Member

Откуда: РФ
Сообщений: 687
 var
  x: Integer;
begin
  x := 21; 

  if x in [1, 2, 3, 10] then // проверка
    ShowMessage('OK1');

  if not x in [1, 2, 3, 10] then // так не работает
    ShowMessage('OK2');

  if not (x in [1, 2, 3, 10]) then // так правильно
    ShowMessage('OK3');

  if (x in [1, 2, 3, 10]) = false then // или так
    ShowMessage('OK4');

end; 
31 авг 19, 12:43    [21961074]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
sql2012,

дано как пример, чтобы было понятно, о какой вложенности речь.
31 авг 19, 12:48    [21961078]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 540
для циклов вообще нужно использовать исключительно inline переменные

for var I: Integer := 0 to 10 do
31 авг 19, 13:30    [21961111]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 701
JaDi
makhaon,

никогда не знаешь, какой код будет вставлен внутри блока с with...

+1000!
То же самое (хотя и меньшей степени) касаетсяи repeat-until и, естественно,
begin-end .
Пока на них смотришь - вроде нормально, но стоит на секунду отвлечься - оп-па, куча непристойных стейтментов. И откуда они только берутся.
31 авг 19, 14:10    [21961123]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 35 36 37 38 39 40 41 42 [43] 44   вперед  Ctrl
Все форумы / Delphi Ответить