Потихоньку подучиваю Java

В Яве нет значений по умолчанию для аргументов методов. То есть так нельзя:

public int method(int a, int b = 1, int c = 2) {
	return a + b + c;
}

Реализовывать это нужно через жопу перегрузку:

public int method(int a, int b, int c) {
	return a + b + c;
}
 
public int method(int a, int b) {
	return method(a, b, 2);
}
 
public int method(int a) {
	return method(a, 1);
}

Если подумать, то да, значениям по умолчанию может быть сложно ужиться в языке с такой вещью, как перегрузка методов. Однако, для большей уверенности полез в гугл → «java параметры по умолчанию». На достаточно большом количестве форумов задаётся вопрос, есть ли эти самые значения по умолчанию или нет. И да, действительно, их нет. Но что самое интересное, поголовно все отвечающие (в большинстве заслуженные дядьки) делают удивлённые o_O и спрашивают «а где такое вообще может понадобиться?».

Вот так вот, казалось бы очевидная и всем известная вещь. А вот и не очевидная и известная далеко не всем.

15 комментариев »

  • Может это типа GOTO? Мне тоже без GOTO плохо было поначалу, когда на PHP перешел…

    adw0rd, 15.04.2009, 9:10

  • перегрузка это то что мне действительно не хватает в php!
    например есть метод

    function test($name = null, $sur_name =null, $age = null)
    {

    }

    если отсутствуют последние два параметра то все красиво
    test(‘вася’);

    а если первые два,

    test(null, null,25); — не очень прикольно

    и в php из-за отсутствия перезагрузки приходится реализовывать ветвление(проверка на существования параметров) , что тоже красоты не предает, а только запутанность кода!

    CyberSport, 16.04.2009, 18:16

  • Перегрузка в пыхе не пройдёт с его мягкой типизацией.

    Передача же аргументов охуенно сделана в Питоне:

    def func(one = 1, two = 2, three = 3, four = 4): ...
    
    # Можно как обычно:
    func(5, 6, 7)
    func(8, 9)
    
    # А можно так:
    func(one = 3, four = 5); # Аналогично - func(3, 2, 3, 5)
    

    vasa_c, 16.04.2009, 19:52

  • # func(one = 3, four = 5); # Аналогично — func(3, 2, 3, 5)

    А С++ случайно не так?

    ThisBook, 21.06.2009, 3:30

  • Нет, не так.
    Я не про определение функции, а именно про вызов с указанием имён аргументов.

    vasa_c, 22.06.2009, 19:22

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

    phpdude, 5.11.2009, 23:19

  • phpdude, это как раз за счет динамики, нахуй там перегрузка

    phppoc, 5.11.2009, 23:27

  • phpdude, не понял о чём ты )

    vasa_c, 6.11.2009, 18:12

  • phppoc, подробнее объясни?

    vasa_c, ты на яве пописать успел? перегрузка методов — сила, а параметры по умолчанию — костыль как и все пхп))

    phpdude, 6.11.2009, 19:12

  • Параметры по умолчанию, как минимум уже в Си были. И в слаботипизированном языке перегрузка, как в Яве не покатит никак.

    >добавляется минимум 1 иф на каждое условие
    не понял, где?

    >и более длинным по строкам методы
    не понял, опять )

    vasa_c, 6.11.2009, 19:34

  • ответ на топик: http://pyha.ru/forum/topic/3575

    $SOME_PREFIX_1 = «test1»;
    $SOME_PREFIX_2 = «test2»;

    $arr = get_defined_vars();
    foreach($arr as $key => $value) {
    if (strstr($key, ‘SOME_PREFIX_’)) {
    echo(«переменная: $key — значение: $value\n»);
    }
    }

    при желании SOME_PREFIX_ можно исключить.
    при мусоре (для TC), если пихать в функцию поиск «ага-ага» — ничего не выдаст — можно обработать.

    собственно ко всем нужным переменным можно добавить префикс в начале:

    // исходные данные
    $test_1 = «test1»;
    $test_2 = «test2»;
    $prefix = «SOME_PREFIX_»;

    // где-то в коде — добавляем префикс для точного поиска
    ${$prefix.$test_1} = $test_1;
    ${$prefix.$test_2} = $test_2;

    // поиск
    $arr = get_defined_vars();
    foreach($arr as $key => $value) {
    if (strstr($key, ‘SOME_PREFIX_’)) {
    echo(«переменная: $key — значение: $value\n»);
    }
    }

    tserj, 16.03.2010, 2:26

  • Э-э. А почему для ответа на этот топик, вы выбрали не собственно этот топик, а запись про яву на совсем другом сайте?

    vasa_c, 16.03.2010, 11:30

  • да он сука спамер! доставай пулемет, будем его ебошить =)

    phpdude, 16.03.2010, 11:35

  • про «жопу» это точно помечено )))

    msangel, 5.10.2010, 22:19

  • Тема старая, но вот я тоже начал интересоваться этим и вот вариант для чего это может понадобиться:
    Курсовой у меня, надо задисасемблить некоторые блоки на разных языках, вот один из них и есть дефолтные значения параметров функций в Ява, но как оказывается их то и нет.

    Сергей, 14.03.2012, 12:51

Leave a comment