Что лучший способ состоит в том, чтобы интегрировать внешний инструмент сборки в Eclipse?

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

я знаю, что на меня вскочат для этого, но я серьезен.

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

Операторы возврата эффективно 'GOTO' точка, где функция была вызвана, присвоив переменную в том объеме.

Операторы возврата - то, что я называю 'Удобным Кошмаром'. Они, кажется, добиваются цели быстро, но вызывают обширные головные боли обслуживания по линии.

Операторы возврата диаметрально настроены против Инкапсуляции

, Это - самое важное и фундаментальное понятие объектно-ориентированного программирования. Это - смысл существования ООП.

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

ЛОД является Вашим другом

, я рекомендую любому разработчику читать о Закон (Лода) Demeter на c2.com или Википедии. ЛОД является принципами проектирования, которые использовались в местах, которые имеют реальные ограничения программного обеспечения 'для решения ответственных задач' в прямом смысле, как JPL. Это, как показывали, уменьшило сумму ошибок в коде и улучшило гибкость.

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

Только говорят с Вашими непосредственными друзьями:

  1. аргументы функции, Вы находитесь в,
  2. Ваши собственные атрибуты,
  3. любые объекты, которые Вы создали в функции

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

атрибуты Доступа других объектов является правильным. Методы get отсутствуют (но Вы знали, что они уже были плохи, правильно?). Методы set в порядке, но лучше использовать конструкторов. Наследование плохо - когда Вы наследовались другому классу, любые изменения в том классе могут и вероятно повреждать Вас. Сниффинг типа плох (Да - ЛОД подразумевает, что Java/C++, основанная на типе стиля отправка является неправильной - спрашивающий о типе, даже неявно, , повреждающаяся инкапсуляция. Тип является неявным атрибутом объекта. Интерфейсы являются Правильной Вещью).

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

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

Поэтому, какова альтернатива?

Говорят , не спрашивать.

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

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

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

, Если Вы следуете за этими аргументами, Вы найдете там, действительно никогда потребность в операторе возврата.

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

5
задан jkp 27 July 2009 в 15:38
поделиться

3 ответа

В IE8 они сделали поле загрузки файла доступным только для чтения в целях безопасности. См. Сообщение в блоге команды IE :

Исторически, элемент управления загрузкой файлов HTML () был источником значительного числа уязвимостей раскрытия информации. Чтобы решить эти проблемы, в поведение элемента управления были внесены два изменения.

Чтобы заблокировать атаки, которые полагаются на «кражу» нажатий клавиш, чтобы тайно обманом заставить пользователя ввести путь к локальному файлу в элемент управления, поле редактирования Путь к файлу открыто теперь только для чтения. Пользователь должен явно выбрать файл для загрузки с помощью диалогового окна «Обзор файлов».

Кроме того, для параметра URLAction «Включить путь к локальному каталогу при загрузке файлов» установлено значение «Отключить» для зоны Интернета. Это изменение предотвращает утечку потенциально конфиденциальной информации о локальной файловой системе в Интернет. Свойства> Строители . Затем нажмите Создать ... , выберите Программа и нажмите OK .

Настройте главную вкладку построителя, используя значения:

Name             : nmbldr_pre
Location         : ${system_path:ksh}
Working Directory: ${build_project}
Arguments        : nmbldr -p 2 -t ${build_type} -s jpre
2
ответ дан 14 December 2019 в 19:21
поделиться

Как говорит VonC, элегантным способом является использование Custom Builder .

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

0
ответ дан 14 December 2019 в 19:21
поделиться

Я могу придумать несколько возможных решений более общей проблемы, когда диапазоны неоднородны и есть «дыры». Самыми простыми из них являются:

  1. Просто заполните карту для всех допустимых значений ключей с сопоставлением нескольких ключей одному и тому же значению. Предполагая, что вы используете HashMaps, это должно быть наиболее эффективным по времени (поиск O (1)), хотя у вас больше работы во время установки и вы используете больше места.
  2. Используйте NavigableMap и используйте floorEntry (ключ) для поиска. Это должно быть менее затратным по времени (O (поиск в журнале (N)), но более эффективным для использования места.

Вот решение с использованием NavigableMaps, которое позволяет «дыры» в отображении.

private static class Range {
   public int upper, value;
   ...
}

NavigableMap<Integer, Range> map = new TreeMap<Integer, Range>();
map.put(0, new Range(3, 0));       // 0..3     => 0
map.put(5, new Range(10, 1));      // 5..10    => 1
map.put(100, new Range(200, 2));   // 100..200 => 2

// To do a lookup for some value in 'key'
Map.Entry<Integer,Range> entry = map.floorEntry(key);
if (entry == null) {
    // too small
} else if (key <= entry.getValue().upper) {
    return entry.getValue().value;
} else {
    // too large or in a hole
}

С другой стороны, если нет 'дырки' решение проще: ProjectPreferences-> C / C ++ Сборка-> BuilderSettings Выберите «Внешний построитель» и введите путь к waf

, например, я использую / Users / mark / bin / waf -v -k -j2

Обратите внимание, что waf и make не согласны с параметром -j, и вы должны указать i явно и не использовать диалоговое окно eclipse.

Вы можете использовать представление Make target добавляет цели для вызова waf, например, configure, build и т. д.

Одна из моих проблем заключалась в том, что Eclipse жестко запрограммирован для просмотра вывода Make say Make при изменении каталога, поэтому мне пришлось исправить waf см. waf issue

3
ответ дан 14 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

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