Каковы самые важные функции IDE для разработки Perl?

Лично, у меня почти никогда нет потребности записать абстрактные классы.

Большинство раз я вижу, что абстрактные классы используемый (mis), это - потому что автор абстрактного класса использует "Шаблонный шаблон" метода.

проблема с "Шаблонным методом" состоит в том, что это почти всегда несколько повторно используемо - "полученный" класс знает о не только "абстрактный" метод его базового класса, который это реализует, но также и об открытых методах базового класса, даже при том, что большинство раз это не должно называть их.

(Чрезмерно упрощенный) пример:

abstract class QuickSorter
{
    public void Sort(object[] items)
    {
        // implementation code that somewhere along the way calls:
        bool less = compare(x,y);
        // ... more implementation code
    }
    abstract bool compare(object lhs, object rhs);
}

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

, Таким образом, намеченное использование - что-то вроде этого:

class NameSorter : QuickSorter
{
    public bool compare(object lhs, object rhs)
    {
        // etc.
    }
}

проблема с этим состоит в том, что Вы незаконно связали вместе два понятия:

  1. А способ сравнить два объекта (какой объект должен пойти сначала)
  2. метод А элементов сортировки (т.е. quicksort по сравнению с сортировкой слиянием и т.д.)

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

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

альтернативный метод должен использовать шаблон разработки "Стратегии" вместо этого:

interface IComparator
{
    bool compare(object lhs, object rhs);
}

class QuickSorter
{
    private readonly IComparator comparator;
    public QuickSorter(IComparator comparator)
    {
        this.comparator = comparator;
    }

    public void Sort(object[] items)
    {
        // usual code but call comparator.Compare();
    }
}

class NameComparator : IComparator
{
    bool compare(object lhs, object rhs)
    {
        // same code as before;
    }
}

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

Для "скрытия" того, что мы реализовали "сортировку имен" при помощи класса "QuickSort" и "NameComparator" мы могли бы все еще записать метод фабрики где-нибудь:

ISorter CreateNameSorter()
{
    return new QuickSorter(new NameComparator());
}

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

Одна последняя мысль: Все, что мы сделали выше, "составляют" функцию "NameSorting" при помощи функции "QuickSort" и функции "NameComparison"... на языке функционального программирования, этот стиль программирования становится еще более естественным с меньшим количеством кода.

36
задан 5 revs, 2 users 50% 15 December 2010 в 14:19
поделиться

18 ответов

Самая важная особенность IDE для разработки Perl (включая Padre):

интерактивный отладчик, который действительно работает . Например, запоминание точек останова, возможность углубляться в сложные структуры данных и копирование (в буфер обмена) должны работать с наблюдаемыми переменными - включая команду меню Copy Special, которая позволяет помещать их в различные форматы; скажем, CSV, XML или разделенные табуляцией.

26
ответ дан 27 November 2019 в 05:26
поделиться

Политики окончания строк для файлов, по каталогам и по проекту.

Итак, для данного проекта или каталога я хотел бы сделать все окончания строк только LF. Находясь в другом каталоге, я, возможно, захочу иметь смесь файлов CRLF и LF.

Я много работаю над вещами, которые перемещаются между средами Unix и Win32.

Типичное решение автоматического преобразования всех файлов обратно и движение вперед с платформы на платформу не сработало для меня.

Когда файл случайно создается в неправильном формате, это может быть настоящей болью.

0
ответ дан 27 November 2019 в 05:26
поделиться

Возможность создавать и отлаживать XS-код.

0
ответ дан 27 November 2019 в 05:26
поделиться

Интеграция цикла чтения-оценки-печати. Как активный пользователь Emacs, я очень ценю Sepia . Очень полезно, чтобы опробовать что-то перед тем, как закрепить его за кодом.

0
ответ дан 27 November 2019 в 05:26
поделиться

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

Мой любимый редактор - UltraEdit. Это не IDE, но благодаря поддержке пользовательских инструментов я смог интегрировать такие функции IDE, как lint, контроль версий, отладка и многое другое.

2
ответ дан 27 November 2019 в 05:26
поделиться

Рефакторинг в стиле Visual-Studio для переменных и имен функций и извлечение функций. Visual Studio выполняет поиск всех ссылок во всем модуле и позволяет увидеть все измененные строки, если вы не хотите изменять один экземпляр (по какой-либо причине) ....

3
ответ дан 27 November 2019 в 05:26
поделиться

Менеджер проекта. Для меня очень важно уметь определять набор файлов и папок, составляющих конкретную кодовую базу. Сеансы полезны, но не заменяют их.

4
ответ дан 27 November 2019 в 05:26
поделиться

Стабильность. Люди быстро отворачиваются, если их редактор выходит из строя и теряет работу.

5
ответ дан 27 November 2019 в 05:26
поделиться

Хорошая интеграция VCS . Это то, что мне очень нравится в Eclipse: вы сразу видите, какие файлы имеют локальные изменения, а какие еще не добавлены в репозиторий. И вы можете просматривать различные версии и иметь красивый обзор различий всего одним щелчком мыши.

4
ответ дан 27 November 2019 в 05:26
поделиться

Первое, что я ищу, это какой-то обзор текущего активного файла. Я хотел бы увидеть методы / функции и, если возможно, модули use'd и, особенно, любые операторы use'd.

Вы довольно хорошо решили это в Padre.

4
ответ дан 27 November 2019 в 05:26
поделиться

Я много пользуюсь Perl EPIC , и моя самая большая проблема - не возможность перейти к функции, которая четко определена в текущий контекст (обычно при нажатии F3). Симпатично много удач или промахов на данный момент.

9
ответ дан 27 November 2019 в 05:26
поделиться

Хорошо, вот мой третий ответ, хотя мне неприятно это говорить.

Конкурс довольно прост в установке. Падре нет. Я попробовал обновиться до последней версии сегодня и снова получил неудачные тесты.

10
ответ дан 27 November 2019 в 05:26
поделиться

Две самые бесценные особенности, которые я нахожу:

  • построчная отладка, точки наблюдения, точки останова и т. Д., Чтобы я мог правильно отлаживать свой код.
  • завершение кода, поэтому я не нужно искать документы (даже в Интернете).
12
ответ дан 27 November 2019 в 05:26
поделиться

Тестирование интеграции.

Perl имеет отличные инструменты для модульного тестирования. Когда я запускаю свой набор тестов и получаю ошибку, я хочу увидеть код для теста, который не прошел.

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

4
ответ дан 27 November 2019 в 05:26
поделиться

Этого можно добиться с помощью use strict ; но также может быть полезной функцией, даже если не использовать 'd явно, а именно:

на днях мы потратили около 10-20 минут на отладку следующего поведения:

my %hash;

$hash->{'key1'} = value1;

# on reading in different module
print $hash{'key1'}; # is of course empty, but was so easy to overlook in the code above

возобновить: надлежащая безопасность типов Perl, обеспечиваемая IDE.

Это могло быть уже реализовано в Padre, хотя, как оказалось, не в Eclipse + EPIC

2
ответ дан 27 November 2019 в 05:26
поделиться

Это выполняется неопределенно, но было бы легко добавить счетчик цикла в предложение while

    var solved = false;
    var tries = 0;

    while (!solved)
    {
         try
         {
            //Do Something
            solved = true;
         }
         catch
         {
             //Fix error
         } 
         finally
         {
              if(solved || IsRediculous(tries))
                 break;

              tries++;
         }
    }
-121--2768677-

Да, довольно часто существует цикл с несколькими повторными попытками, когда вы вырываетесь из цикла при успехе. Несколько вещей:

Вы можете добавить задержку перед повторением, чтобы не использовать все повторные попытки всего за несколько миллисекунд, прежде чем временная проблема успеет исправиться.

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

-121--2768683-

Возможность использовать свой собственный выбор редактора (который он может иметь, насколько я знаю). Это имеет шанс выиграть над vim/emacs людей.

0
ответ дан 27 November 2019 в 05:26
поделиться

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

0
ответ дан 27 November 2019 в 05:26
поделиться

Я работаю с Komodo. Я также использую другие редакторы, но чаще всего возвращаюсь к Komodo. Хорошая IDE должна иметь:

  1. Хороший отладчик. Точки останова, списки наблюдения, все, что вам нужно.
  2. Удаленная отладка. Возможность отладки потоков.
  3. Выделение синтаксиса, включая взвешенные шрифты (например, я был разочарован Oxygen, IDE для XSLT, где я не могу использовать жирные шрифты, чтобы подчеркнуть зарезервированные термины)
  4. Завершение синтаксиса.
  5. Инструменты управления проектами, желательно расширяемые плагинами.
5
ответ дан 27 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: