Это хорошая практика для создания функций, которые используют другие функции, которые вы создали? - PullRequest
1 голос
/ 31 июля 2010

Это хорошая практика для создания функций, которые используют другие функции, которые вы создали?

Мне было интересно, хорошо ли это иметь, так как это делает код менее переносимым.

Спасибо

Ответы [ 7 ]

13 голосов
/ 31 июля 2010

Очень хорошая практика.

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

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

Хороший код состоит из небольших, понятных функций. Некоторые люди говорят, что функция, которая длиннее 30 строк, слишком длинна.

4 голосов
/ 31 июля 2010

Да.Это основа программирования.Это никоим образом не делает код менее переносимым, скорее наоборот.

2 голосов
/ 31 июля 2010

В процедурном и объектно-ориентированном коде - да, хотя в какой-то момент вы захотите просмотреть то, что у вас есть, и посмотреть, должна ли библиотека / и т. Д. Быть посвящена необходимой вам функциональности.SQL нет.SQL основан на множестве, а абстрактные функции / представления / хранимые процедуры являются хрупкими и имеют тенденцию не выполнять так же хорошо, как переписывание с минимальным использованием функций / и т.д., насколько это возможно.

1 голос
/ 31 июля 2010

Вы только что описали программирование. Ознакомьтесь с:

Повторное использование «материала» является одним из основных принципов любой инженерной дисциплины, а не только информатики.

1 голос
/ 31 июля 2010

Хорошей практикой является не писать очень длинные функции. Это обычно требует использования других самописных функций.

1 голос
/ 31 июля 2010

Если у вас не будет только одной большой функции, которая является всей вашей программой (и вы сможете делать сложные вещи только с помощью кода спагетти), вы будете вынуждены вызывать другие функции, поэтому я не вижу смысла вашего вопроса.

На самом деле, если вы инкапсулируете функциональность внутри функции и используете ее во всей программе, вы будете:

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

Поэтому, пожалуйста, вызывайте функции, которые вы написали из других функций, это то, как это работает, это просто здорово.

0 голосов
/ 31 июля 2010

Я бы сказал, да.

Если у вас есть функциональность, которую можно разбить на 2 логические части, возможно, многократного использования, сделайте это.

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

Например:

ShowPage(url) {
    request = new Request(url)
    response = request.Send()
    page = response.GetHTML()
    browser.Load(page)
}

может стать:

RetrievePage(url) {
    request = new Request(url)
    response = request.Send()
    return response.GetHTML()
}

ShowPage(url) {
    page = Retrieve(url)
    browser.Load(page)
}

Теперь RetrieveUrl можно использовать повторно, например, функцией поиска по веб-сайту какого-либо контента.

...