В отношении альтернативы @ Suragch для «Удалить элемент неизвестного индекса»:
Существует более мощная версия «indexOf (element)», которая будет соответствовать предикату, а не самому объекту. Он имеет одно имя, но он называется myObjects.indexOf {$ 0.property = valueToMatch}. Он возвращает индекс первого совпадающего элемента, найденного в массиве myObjects.
Если элемент является объектом / структурой, вы можете удалить этот элемент на основе значения одного из его свойств. Например, у вас есть класс Car, у которого есть свойство car.color, и вы хотите удалить «красный» автомобиль с вашего автомобиля.
if let validIndex = (carsArray.indexOf{$0.color == UIColor.redColor()}) {
carsArray.removeAtIndex(validIndex)
}
Возможно, вы можете переделать это, чтобы удалить «все» красные автомобили путем вложения вышеприведенного оператора if в цикл repeat / while и присоединения блока else, чтобы установить флаг «break» из цикла.
Если код:
Одной из вещей, которые я ищу в коде, является модульный тест. Это даст свободу осуществить рефакторинг его. Таким образом, если код не имеет тестов, я считаю это унаследованным кодом.
Micheal Feathers, Автор превосходной "Работы Эффективно с Унаследованным кодом", определяет он как любой код, который не имеет тестов.
Лучший вопрос, вероятно, был бы тем, что отмечает часть кода как не наследие.
Мне неизменные средства прежней версии. Таким образом, как только Вы больше не можете изменить его, это - наследие.
Удалена ли та способность фиксированными требованиями, страхом перед поломкой, потерей знаний, или некоторое другое влияние в основном не важно.
Связанное примечание - то, что я не думаю, что когда-либо использовал бы наследие точного слова, поскольку оно вызывает слишком много эмоций, чтобы быть полезным.
Мы используем термин "наследие" для обращения к любому коду, все еще используемому, разработал технологию использования, в которой мы прекратили активную разработку.
Это - код, что мы переписали бы использующие более свежие инструменты, чем изменили бы в его текущем состоянии.
Я не полагаю, что существует категорический ответ, но я действительно полагаю, что вероятность, что код является увеличениями унаследованного кода с числом людей, которые не хотят касаться его и вероятность, что изменение его заставит его повреждаться.
По-моему, весь код, который написан, является унаследованным кодом. Это могло бы занять время, прежде чем об исходном намерении и всех решениях, принятых относительно кода, забывают, но рано или поздно Вы не можете вообразить то, что они думали при записи этого. Вы никогда не пишете унаследованный код сами, правильно?
Используя модульные тесты или некоторую меру как секунды, так как разработчик оставил здание, действительно не имеют размеры, является ли код унаследованным кодом. Унаследованный код может иметь хороший набор модульных тестов и комментариев, и он, возможно, подвергся строгому обзору кода и другому анализу. Это не означает, что нормы все еще важны для программы под рукой. Это просто предполагает, что код мог бы быть сравнительно правильно написан. И если это больше не будет релевантно, то код будет на самом деле мешать решать проблему, для которой разрабатывается программа.
термин "унаследованный код" субъективен и является, вероятно, загруженным термином. но в целом я подписываюсь на представление, что унаследованный код является тем, который не является тестируемым единицей, и как таковой твердо осуществить рефакторинг.
Унаследованный код был определен во многих местах как "код без тестов". Я не думаю, что они конкретны в типах тестов, но в целом, если Вы не можете делать изменение в свой код без страха перед чем-то неизвестным случаем, ну, в общем, это быстро передает.
Я, возможно, неправильно, но я не думаю, что существует установленная метрика для этого.
Обычно часть кода, как считают, является наследием, когда это видело по крайней мере 5-6 циклов выпуска (возможно, больше). Как правило, Исходный Конструктор больше не вокруг, и код сохраняется через.
Обычно люди называют что-то унаследованным кодом, когда никто не все еще вокруг этого, знакомо с или чувствует себя комфортно, поддерживая код.
Модульные тесты помогают людям, незнакомым с кодом вырыть в него, таким образом, теория, это помогает препятствовать тому, чтобы код стал "наследием".
Часто, когда код является наследием, это изменяется другим способом. Люди боятся изменить его, но также и изменения имеют тенденцию быть быстрыми и грязными, потому что никто не понимает полных последствий. Проблемы дублирования кода могут возникнуть, потому что люди не хотят рисковать связанные с более глубокими изменениями.
Так, при таких обстоятельствах ситуация может ухудшиться на увеличивающемся уровне.
Почти спустя секунды после того, как devs покидают помещение.:)
Если...
нет никаких денег в банке новых возможностей
Вы не можете найти никого, который допускает работать над проектом, для которого нужна фиксация
исходный код к проекту, которым Вы владеете, пошел MIA
... затем Вы работаете над унаследованным кодом.
Я не знаю ни о каких реальных метриках, которые могут использоваться, чтобы определить, является ли что-то "унаследованным кодом" или нет, но что-либо более старое, чем просто записанный можно было бы считать наследием. Унаследованный код означает разные вещи для различных людей/организаций, таким образом, это действительно несколько субъективно.