Я сделал некоторые поиски здесь и не нашел ничего подобного, поэтому я собираюсь идти вперед и спрашивать. Это действительно больше о семантике, чем о реальном программировании. В настоящее время я пишу что-то на C++, но язык не имеет большого значения.Насколько коротким должна быть функция?
Я хорошо знаю, что это хорошая практика программирования, чтобы ваши функции/методы были как можно короче. Но как вы знаете, слишком ли длинна функция? В качестве альтернативы, можно ли слишком сильно сломать функции?
Первый язык программирования, который я узнал (кроме Applesoft BASIC, который не учитывается ...) был 6502 ассемблером, где скорость и оптимизация - это все. В случаях, когда несколько циклов подсчитывают время всей вашей программы, часто лучше устанавливать местоположение памяти или регистрироваться напрямую, а не переходить на другую подпрограмму. Первая операция может занять 3 или 4 цикла, в то время как последняя может занять 2-3 раза.
Хотя я понимаю, что в наши дни, если бы я даже упомянул количество циклов для некоторых программистов, они просто дали бы мне пустой взгляд, это трудная привычка ломаться.
В частности, скажем, (опять же с помощью C++) у нас есть метод частного класса, который что-то вроде следующего:
int Foo::do_stuff(int x) {
this->x = x;
// various other operations on x
this->y = this->x;
}
Я видел некоторые аргументы, которые, по крайней мере, каждый набор операций должен быть его собственной функцией. Например, do_stuff() следует теоретически называть set_x (int x), отдельная функция должна быть записана для набора операций, выполняемых с элементом класса x, а третья функция должна быть записана для назначения конечного значения члена класса x - члену класса y. Но я видел другие аргументы, что каждая операция должна иметь свою собственную функцию.
Для меня это просто кажется неправильным. Опять же, я смотрю на вещи с внутренней точки зрения; каждый вызов метода вызывает адрес в стеке, выполняет его операции, а затем возвращается из подпрограммы. Это просто похоже на накладные расходы для чего-то относительно простого.
Есть ли передовая практика для такого рода вещей или это больше подходит для индивидуального решения?
Спасибо, это определенно полезно. C++ - отнюдь не мой первый неассемблерный язык, но поскольку у меня никогда не было какой-либо формальной подготовки во всем, я думал, что лучше всего получить некоторые отзывы о методах кодирования. – xobicvap
+1 за то, что он не беспокоился о циклах, пока это не проблема. Преждевременная оптимизация - это корень всего зла. – riwalk