2014-11-16 2 views
0

В Java я искал в Интернете, как сделать функцию с параметрами по умолчанию, я узнал, что мне нужно снова написать функцию с меньшими параметрами.Как реализовать функции с параметрами по умолчанию

Пример:

f (a, b) {..} 

f (a) {..} 

f() {..} 

Теперь, 2 способа кодировать эти функции стоят передо мной:

  1. Скопируйте и вставьте алгоритм в 3-х методов и изменить его, заменив параметры с требуемые константы:

    f (a, b) { //algorithm with a and b } 
    
    f (a) { //algorithm with a and a constant } 
    
    f() { //algorithm with 2 constants } 
    

    Преимущества: оптимизация скорости движения

    Недостаток: когда мне нужно будет внести изменения в мою функцию, мне придется менять код столько раз, что я написал функцию (здесь три раза три раза).

  2. Вернуть предыдущую функцию, давая ему константу в параметрах:

    f (a, b) { //algorithm } 
    
    f (a) { return f (a, 1); } 
    
    f() { return f ("x"); } 
    

    Преимущества: Легче читать, и код является гибким.

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

Какой способ лучше?

+6

Этот вопрос не соответствует теме, потому что его нет на английском языке. (Traduisez votre question en anglais, s'il vous plait!) –

+0

Это не «переполнение французского стека», пожалуйста, переведите на английский язык ... –

+0

ok Я сделаю это прямо сейчас. – Yairopro

ответ

3

Конечно, вы должны предпочесть второй путь. Дублирующий код - это то, чего вам следует избегать. Это делает ваш код сложнее в обслуживании, и это лучший способ ввести ошибки. Что вы делаете здесь является преждевременным микро-оптимизации:

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

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

Вы не должны даже думать об оптимизации кода, прежде чем у вас возникнет проблема с производительностью, и вы доказали, что проблема возникла в этом коде. Обычно проблемы с производительностью поступают от IO (чтение файлов, запросы к базе данных и т. Д.) Или от плохих алгоритмов (O (n2) вместо O (n)) на больших наборах данных. Не из 1 или 2 вызовов метода.

+1

Если сделать его широко, он также может быть медленнее, поскольку наличие большего количества кодов означает большее давление в кеше. – maaartinus

+0

JB Nizet, Спасибо за ваш четкий ответ. – Yairopro