Программирование C#, Java, Net - фото

Именованные и необязательные параметры в C# (.Net 4)


Оцените данную статью

В данной статье поговорим о новых возможностях, которые были добавлены относительно недавно в .Net 4. А именно, об именованных и необязательных (опциональных) параметрах методов, а так же разбавим статью обсуждением об удобочитаемости исходного кода.

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

  1. int value = someMethodWithParams(3, true);

Что обозначает первый аргумент равный 3 и второй — true. Не понятно совсем. Какие-то магические значения. Ладно если код писали вы чисто для себя и никто его не увидит ( хотя к такому стилю программирования не надо себя приучать), но дело даже не в этом…Через несколько месяцев вы не сразу вспомните что к чему. А если вы пишете в команде разработчиков? Другому программисту совсем непонятно, что здесь написано и он в любом случае полезет в определение метода, чтобы разобраться как всё устроено.

В общем проблема ясна. Теперь посмотрим, как можно избавиться от подобного кода.

Именованные константы

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

    1. const int countOfSortElements = 3;
    2. const bool ascending = true;
    3. //…int value = someMethodWithParams(countOfSortElements , ascending);

Вот теперь код стал немного понятнее. Наши константы, вернее их имена, поясняют их назначение. Допустим наш метод сортирует последовательность элементов и мы ему передаем в качестве первого параметра — количество сортируемых элементов, в качестве второго — в каком порядке сортировать (по возрастанию, убыванию).
Такой подход подходит конечно не во всех случаях. И основным его недостатком является то, что приходится определять новые переменный и исходный код увеличивается за счет этого.

Перечисления

Данный подход стоит использовать не во всех случаях, а только лишь при ограниченном числе значений. Допустим второй аргумент в нашем примере мы можем заменить перечислением, а вот первый заменять не имеет смысла, поскольку число элементов для сортировки у нас может быть от нуля и до бесконечности по большому счету. Посмотрим на следующий пример с перечислениями.

    1. enum SortOrder {Ascending = true, Descending = false;}
    2. const int countOfSortElements = 3;
    3. //…
    4. int value = someMethodWithParams(countOfSortElements , SortOrder.Ascending);

Используя перечисления, читабельность нашего кода еще немного увеличилась. Это конечно должно нас радовать, но всё равно данный подход можно использовать не во всех случаях. Ну и наконец перейдем к еще одному способу, который является непосредственно темой данной статьи.

Именованные параметры

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

В языке программирования C# 4 появилась возможность использовать необязательные параметры в методах, индексаторах и конструкторах. Они служат для указания того, что определенное значение является значением по умолчанию. Рассмотрим код:

  1. public int someMethodWithParams(int countOfSortElements , bool sortOrder = true){ //.. }

Параметр sortOrder имеет значение по умолчанию true и вследствие этого является необязательным параметром. Этот метод можно вызвать несколькими способами, либо передавая второй параметр:

    1. const int countOfSortElements = 5;
    2. const bool ascending = true;
    3. int value = someMethodWithParams(countOfSortElements, ascending );

Либо не передавать второй аргумент и будет использоваться значение по умолчанию равное true:

    1. const int countOfSortElements = 5;
    2. int value = someMethodWithParams(countOfSortElements);

В принципе ничего сложного, единственное замечание. Необязательные параметры должны идти после обычных параметров. Это первое. А второе, если допустим у нас в методе три параметра, а второй и третий из них являются необязательными, то мы не сможем вызвать метод передав только первый и третий параметр. Вот в этом случае нам и помогут именованные параметры. Концепция именованных параметров позволяет указывать имена параметра в методе. Рассмотрим случай с тремя параметрами в методе:

    1. void someMethod(int arg1, double arg2 = 3.4, bool arg3 = false){ //.. }
    2. //…
    3. someMethod(12, arg3: true);

Пользуясь именованными параметрами мы можем опустить второй необязательный параметр. А теперь вернемся к коду из начала статьи:

  1. int value = someMethodWithParams(countOfSortElementsArg: 3, sortOrderArg: true);

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

И напоследок еще один примерчик, для демонстрации того, что именованные параметры можно использовать любым способом, показанным ниже:

    1. public void someMethod(int x = 0, bool y = 0){ // ….}
    2. //….
    3. someMethod();
    4. someMethod(x: 5);
    5. someMethod(y: 10);
    6. someMethod(x: 3, y: 2);
    7. someMethod(y: 1, x: 2);

На этом всё об именованных, необязательных параметрах в C# 4 и читабельности кода . Надеюсь из статьи вы подчерпнули новые, полезные знания.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *