Re[3]: Функции должны быть компактными
От: __kot2  
Дата: 25.04.16 20:38
Оценка:
Здравствуйте, T4r4sB, Вы писали:
TB>Здравствуйте, __kot2, Вы писали:
__>>любой человек, который до сих пор пишет ф-ии в столбик строк по 30, вставляя туда комменты просто неквалифицирован и его нельзя допускать до написания реального кода
TB>30 это много?
слова много и мало они тут неправильные
у меня был знакомый, он тоже писал, писал, потом когда думал, что уже много, создавал новый файл и начинал писать туда. так люди какают, а не пишут программы
функция должна делать одно дело. 30 строк — очень редко когда это что-то прямо одно такое. бывает, но редко. чаще всего там все-таки несколько действий, каждое из которых имеет смысла выделить в отдельную ф-ию.
если все равно непонятно что означает "одно действие", то для начала создайте блоки минимальной видимости переменных, типа

void see_you()
{
  int size = get_size();
  if size > ... 
  do_something(size)

  //а здесь ниже уже нигде size не ипользуется и идет код типа
  call_something()
  do_some_stuff()
  for ( x)
  {
    if ( x > 10)
    {
      print_something();
      x += 2;
    }

    superman = new superman()
    betment = new betment()
    fight(superman, betment)
  }
}

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

void see_you()
{
  {
    int size = get_size();
    if size > ... 
    do_something(size)
  }

  call_something()
  do_some_stuff()

  for ( x : xs)
  {
    if ( x > 10)
    {
      print_something();
      x += 2;
    }

    {
      superman = new superman()
      betment = new betment()
      fight(superman, betment)
    }
  }
}


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

void see_you()
{
  adjust_size()
  call_something()
  do_some_stuff()

  for ( x : xs)
  {
    if ( time_to_so_it(x))
      do_it();

    betment_superman_fight();
  }
}

или даже правильнее будет

void see_you()
{
  adjust_arena_size()
  call_spectators()
  setup_lights()

  betment_fight_for_every_something(xs);
}


причем я не говорю о рефакторинге, никто не мешает так писать сразу. и, разумеется, именя ф-ий не должны называться do_stuff() а должны описывать что конкретно за стафф мы ду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.