Конструкции избыточного кода

Сначала я собрал бы ваши позиции в сетке в collections.defaultdict или наборах, а затем перестроил строки строчными буквами, если их позиции существуют в этих наборах.

Демонстрация:

from collections import defaultdict

grid1 = ["PIGATOS", "ANRBKFD", "TMCAOXA", "OOBBYQU", "MACOUIV", "EEJMIWL"]

positions_words_occupy = (
    (0, 0),
    (1, 0),
    (2, 0),
    (3, 0),
    (0, 2),
    (0, 3),
    (0, 4),
    (0, 5),
    (3, 2),
    (4, 3),
    (5, 4),
    (2, 2),
    (2, 3),
    (2, 4),
)

d = defaultdict(set)
for grid, pos in positions_words_occupy:
    d[grid].add(pos)

result = []
for grid, pos in d.items():
    result.append(
        "".join(x.lower() if i in pos else x for i, x in enumerate(grid1[grid]))
    )

print(result)

Выход:

['pIgatoS', 'aNRBKFD', 'tMcaoXA', 'oObBYQU', 'MACoUIV', 'EEJMiWL']

7
задан 2 revs 15 June 2009 в 02:30
поделиться

19 ответов

if (foo == true)
{
   do stuff
}

Я продолжаю говорить разработчику, который делает это, что это должно быть

if ((foo == true) == true)
{
   do stuff
}

но он еще не получил подсказку.

11
ответ дан 6 December 2019 в 04:45
поделиться

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

0
ответ дан 6 December 2019 в 04:45
поделиться

Я часто сталкиваюсь со следующим:

function foo() {
    if ( something ) {
        return;
    } else {
        do_something();
    }
}

Но это не помогает сообщению их, что еще бесполезно здесь. Это должно быть также

function foo() {
    if ( something ) {
        return;
    }
    do_something();
}

или - в зависимости от продолжительности проверок, которые сделаны прежде do_something ():

function foo() {
    if ( !something ) {
        do_something();
    }
}
1
ответ дан 6 December 2019 в 04:45
поделиться

От кошмарных обзоров кода.....

char s[100];

сопровождаемый

memset(s,0,100);

сопровождаемый

s[strlen(s)] = 0;

с большим количеством противных

if (strcmp(s, "1") == 0)

разбросанный код.

1
ответ дан 6 December 2019 в 04:45
поделиться

Дублирование вставки копии:

if (x > 0)
{
   // a lot of code to calculate z
   y = x + z;
}
else
{
   // a lot of code to calculate z
   y = x - z;
}

вместо

if (x > 0)
  y = x + CalcZ(x);
else
  y = x - CalcZ(x);

или еще лучше (или более запутываемый)

y = x + (x > 0 ? 1 : -1) * CalcZ(x)
2
ответ дан 6 December 2019 в 04:45
поделиться

Выделение элементов на "куче" вместо стека.

{
    char buff = malloc(1024);
    /* ... */
    free(buff);
}

вместо

{
    char buff[1024];
    /* ... */
}

или

{    
    struct foo *x = (struct foo *)malloc(sizeof(struct foo));
    x->a = ...;
    bar(x);
    free(x);
}

вместо

{
    struct foo x;
    x.a = ...;
    bar(&x);
}
2
ответ дан 6 December 2019 в 04:45
поделиться

Страх перед пустым указателем (это также может привести к серьезным проблемам):

if (name != null)
  person.Name = name;

Избыточный if's (еще не использующий):

if (!IsPostback)
{
   // do something
}
if (IsPostback)
{
   // do something else
}

Избыточные проверки (Разделение никогда не возвращает пустой указатель):

string[] words = sentence.Split(' ');
if (words != null)

Больше на проверках (вторая проверка избыточна, если Вы собираетесь циклично выполниться),

if (myArray != null && myArray.Length > 0)
  foreach (string s in myArray)

И мой фаворит для ASP.NET: Рассеянный DataBinds на всем протяжении кода для создания рендеринга страницы.

2
ответ дан 6 December 2019 в 04:45
поделиться

Помещение exit оператор как первый оператор в функции, который отключит выполнение той функции вместо одной из следующих опций:

  • Полностью удаление функции
  • Комментарий тела функции
  • Хранение функции, но удаление всего кода

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

2
ответ дан 6 December 2019 в 04:45
поделиться
void myfunction() {
  if(condition) {
    // Do some stuff
    if(othercond) {
      // Do more stuff
    }
  }
}

вместо

void myfunction() {
  if(!condition)
    return;

  // Do some stuff

  if(!othercond)
    return;

  // Do more stuff
}
3
ответ дан 6 December 2019 в 04:45
поделиться

Используя .tostring на строке

2
ответ дан 6 December 2019 в 04:45
поделиться

Возврат бесполезно в конце:

   // stuff
   return;
}
2
ответ дан 6 December 2019 в 04:45
поделиться

У меня когда-то был парень, который неоднократно делал это:

bool a;
bool b;
...
if (a == true)
    b = true;
else
    b = false;
3
ответ дан 6 December 2019 в 04:45
поделиться

Избыточный код не является сам по себе ошибкой. Но если Вы действительно пытаетесь сохранить каждый символ

return (condition);

избыточно также. Можно записать:

return condition;
4
ответ дан 6 December 2019 в 04:45
поделиться

Объявление отдельно от присвоения на языках кроме C:

int foo;  
foo = GetFoo();
4
ответ дан 6 December 2019 в 04:45
поделиться

Где-нибудь я определил эту вещь, которую я нахожу, чтобы быть вершиной булева дублирования:

return (test == 1)? ((test == 0) ? 0 : 1) : ((test == 0) ? 0 : 1);

:-)

5
ответ дан 6 December 2019 в 04:45
поделиться

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

8
ответ дан 6 December 2019 в 04:45
поделиться

Избыточный.ToString () вызовы:

const int foo = 5;
Console.WriteLine("Number of Items: " + foo.ToString());

Ненужное строковое форматирование:

const int foo = 5;
Console.WriteLine("Number of Items: {0}", foo);
0
ответ дан 6 December 2019 в 04:45
поделиться
if (condition == true)
{
  ...
}

вместо

if (condition)
{
  ...
}

Править:

или еще хуже и оборачивающийся условный тест:

if (condition == false)
{
  ...
}

который легко читается как

if (condition) then ...
10
ответ дан 6 December 2019 в 04:45
поделиться

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

Другой - шаблоны проектирования, используемые там, где их нет смысла. Например, везде писать «new BobFactory (). CreateBob ()», а не просто писать «new Bob ()».

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

2
ответ дан 6 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

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