Конференция "Прочее" » FixInsight for Delphi
 
  • Kerk © (30.04.15 22:50) [120]

    > Юрий Зотов ©   (30.04.15 13:56) [116]
    >
    > > Kerk
    >
    > Еще бы fast fix добавить, где это возможно - полная конфета
    > была бы. Понимаю, не просто. Ну на будущее - как вариант
    > развития.

    Что-то такое иметь было бы очень здорово. Постепенно, надеюсь, все получится.
    Вообще, как можно плотнее интегрироваться с IDE - один главных приоритетов.


    > Юрий Зотов ©   (30.04.15 20:58) [118]

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


    > Юрий Зотов ©   (30.04.15 21:06) [119]
    >
    > Но FixInsight  сработал правильно, место подозрительное.

    Такие ситуация - моя большая боль. Одно дело действительно настоящие ложные срабатывания, с которыми я борюсь как могу. А другое - когда срабатывание верное, но программист эту ситуацию умышленно допустил. Это все-таки всего-лишь анализатор, а не искусственный интеллект, он не может такие тонкие вещи прочувствовать.

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

    А боль это для меня потому, что многие пользователи ждут от инструмента совершенно магического поведения и расстраиваются, что это не так. Имеют право, конечно.
  • Юрий Зотов © (01.05.15 09:14) [121]
    > Kerk

    > Это все-таки всего-лишь анализатор, а не искусственный интеллект,
    > он не может такие тонкие вещи прочувствовать.

    Естественно. Да и не нужно ему ничего чувствовать. А вот ввести что-то типа опции ON/OFF было бы, наверное полезно. Примерно так:

    В своем модуле определяешь две опции:

    {$DEFINE FixInsightOn}
    {$DEFINE FixInsightOff}


    И если юзер хочет локально отключить FixInsight, то пишет что-то вроде этого:

    {$FixInsightOff}
    tmrFilter.Enabled := false;
    tmrFilter.Enabled := true;
    {$FixInsightOn}


    Код неверный, но суть показывает.
  • Юрий Зотов © (01.05.15 09:23) [122]
    То есть, речь идет о комментарии специального вида. Встретив открывающий комментарий, FixInside пропускает код до закрывающего комментария (а если его нет, то до конца модуля).
  • Игорь Шевченко © (01.05.15 10:47) [123]
    Kerk ©   (30.04.15 22:50) [120]


    > Я бы на самом деле на любую передачу указателя на вложенную
    > функцию ругался. Случаи, когда это оправдано придумать сложно,
    >  а вот проблем не оберешься.


    итераторы в Collections в Turbo Vision. Я не понимаю, почему они так сделали, но факт остается фактом.

    Если вложенные функции допустимы конструкцией языка, то почему бы и не передавать указатели на них ? :)
    Я не понимаю (за 20 с лишним лет программирования на паскале) конструкции
    repeat ... until и за все это время использовал ее считанное количество раз, но не ругаюсь, когда ее используют другие :)
  • eldorad © (01.05.15 12:28) [124]
    >Я не понимаю (за 20 с лишним лет
    >программирования на паскале) конструкции
    >repeat ... unti

    А вот это интересно.

    Repeat тоже самое что while, только в первом случае тело цикла первый раз выполняется всегда, а потом уже проверяется условие, во втором случае сначала проверяется условие. В зависимости от задачи бывает удобно то так, то эдак. Что тут может быть непонятного?
  • eldorad © (01.05.15 12:48) [125]
    Классика:

    if FindFirst(FileName, faArchive,SearchRec) = 0 then
     repeat
       if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
       begin
         ...
       end;
     until FindNext(SearchRec) <> 0;

    Как это переписать так же лаконично через while?
  • eldorad © (01.05.15 12:52) [126]
    Ну например как в си плюс в цикле for можно использовать ++i а можно i++
    Бывает удобно так, бывает эдак.

    Хочется послушать размышлений насчет непонимания.
  • Юрий Зотов © (01.05.15 15:26) [127]
    > eldorad ©   (01.05.15 12:52) [126]

    Похоже, Игорь имеет в виду не сам цикл, а условие выхода из него. Когда-то давно я тоже не сразу привык, что repeat заканчивается на true.
  • eldorad © (01.05.15 15:34) [128]
    Дядя Юра,  сказано достаточно четко:

    Я не понимаю ... конструкции
    repeat ... until и за все это время использовал ее считанное количество раз
  • jack128 © (01.05.15 19:18) [129]

    > Ну например как в си плюс в цикле for можно использовать
    > ++i а можно i++
    > Бывает удобно так, бывает эдак.

    C точки зрения производительности (в общем случае) - нужно писать ++i. Но если i - встроенный тип, то современные компиляторы соптимизимруют.
  • Cobalt © (01.05.15 20:51) [130]
    У нас тут в коде у нас нашлось такое:
    Result := Result;
  • Rouse_ © (01.05.15 21:21) [131]
    Вовч, это ерунда. Помнишь, когда у нас еще работал был такой Леха и его код?
    Оть это была реальная жесть, один тока перечислимый тип из полутора тыщ констант чего стоил :)
  • Kerk © (01.05.15 21:29) [132]

    > Юрий Зотов ©   (01.05.15 09:14) [121]
    > И если юзер хочет локально отключить FixInsight

    Так есть что-то похоже уже. Можно использовать директиву компилятора _FIXINSIGHT_.

    [delphi]
    {$IFNDEF _FIXINSIGHT_}
    tmrFilter.Enabled := false;
    tmrFilter.Enabled := true;
    {$ENDIF}
    [/delphi]

    Если директива _FIXINSIGHT_ установлена, значит идет анализ кода. И можно этим пользоваться, исключать какие-то куски.


    > Игорь Шевченко ©   (01.05.15 10:47) [123]
    > Если вложенные функции допустимы конструкцией языка, то
    > почему бы и не передавать указатели на них ? :)

    Допустимыми конструкциями языка является вообще много что. Например пустой except вполне допустим, и метод длиной 1000 строк тоже допустим, и даже Result := Result вполне допустимая конструкция :)

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

    По поводу отключения проверка, у меня есть забавная история.

    При удалении FixInsight открывается окошко с просьбой рассказать почему человек его удаляет: что-то не понравилось, не работает и т.п. Большинство это окошко просто молча закрывает, но некоторые отвечают. Это полезно.

    Так вот один из отзывов звучит примерно так: "у меня плохой код, я это и сам знаю, утилита мне не нужна" :)


    > Юрий Зотов ©   (01.05.15 15:26) [127]
    >
    > > eldorad ©   (01.05.15 12:52) [126]
    >
    > Похоже, Игорь имеет в виду не сам цикл, а условие выхода
    > из него. Когда-то давно я тоже не сразу привык, что repeat
    > заканчивается на true.

    Я тоже постоянно на этом спотыкаюсь. Так-то с точки зрения английского языка все понятно ("пока не..."), но непонятно почему для постусловия нельзя было использовать тот же while.

    Типа,
    [delphi]
    begin
     Dec(I);
    end while (I > 0);
    [/delphi]
    Хотя сейчас смотрю на этот код и неестественно он как-то выглядит.
  • Германн © (01.05.15 22:15) [133]

    > непонятно почему для постусловия нельзя было использовать
    > тот же while

    Как раз с точки зрения английского понятно. :)
    "В то время как" никак не вяжется с пост-условием.
  • Ega23 © (01.05.15 23:00) [134]

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


    А чё в прошедшем-то времени-то? Да и кот этот никуда не делся.
  • Германн © (02.05.15 01:20) [135]

    > Rouse_ ©   (01.05.15 21:21) [131]
    >
    > Вовч, это ерунда. Помнишь, когда у нас еще работал был такой
    > Леха и его код?
    > Оть это была реальная жесть, один тока перечислимый тип
    > из полутора тыщ констант чего стоил

    Неужто кому-то было не лень писать столько констант? Или он автоматизировал сей процесс? :)
  • Юрий Зотов © (02.05.15 06:31) [136]
    > Kerk ©   (01.05.15 21:29) [132]

    Если вместо общих begin-end использовать специальные ключевые слова, то все становится естественно. Например:

    repeat
     ...
    while ... ; // Выход при false

  • Sha © (02.05.15 15:49) [137]
    > Когда-то давно я тоже не сразу привык, что repeat заканчивается на true.

    В Паскале везде работает простая мнемоника:
    при истинном условии всегда проваливаемся ниже к следующему оператору,
    при ложном условии - последовательное выполнение операторов нарушается.
  • eldorad © (02.05.15 20:45) [138]

    > C точки зрения производительности (в общем случае) - нужно
    > писать ++i

    Жень, я про порядок выполнения операций.

    В общем, ИШ что-то такое сказал, что гадать бессмысленно :) Или автор пояснит, или это навсегда останется тайной :)))
  • jack128 © (02.05.15 22:14) [139]

    > Жень, я про порядок выполнения операций.

    Э-э-э. В контексте цикла for какое это имеет значение?
    for (auto it = begin(container); it < end(container); it++) {

    }

    ...
    for (auto it = begin(container); it < end(container); ++it) {

    }


    логически обе формы эквивалентны. А вот с точки зрения производительности разница есть.
 
Конференция "Прочее" » FixInsight for Delphi
Есть новые Нет новых   [134433   +24][b:0.001][p:0.001]