|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Работа с функциями  

Работа с функциями

Оглавление
Работа с функциями
Страница 2
Страница 1 из 2

Здесь народ расскажет о различных полезных, но неочевидных приемах написания функций.

Как создать необязательные параметры функции?

Проблема

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

Решение

Если при вызове функции какой-либо из ее параметров был пропущен, в коде гела функции ему будет присвоено значение undefined. Так что последовательность действий ясна.

Проверяем, имеет ли этот параметр значение undefined (т. е. был ли он передан функции явно). Если да, переходим к шагу 2, если нет— к шагу 3.

Присваиваем параметру значение по умолчанию.

Используем значение этого параметра в вычислениях внутри тела функции.

Пример 1

от объявление функции, второй параметр которой — раг2 — является не-обязательным и имеющим значение по умолчанию 0.

function func1 (par1, par2)

{

if (typeof(par2) == "undefined") par2 = 0;

} Мы можем вызвать эту функцию как с указанием всех параметров:

func1 (5, 2);

так и с указанием только первого — обязательного — параметра:

func1(10);

В последнем случае второй параметр получит в теле функции значение 0. Эффект будет тот же, если бы мы вызвали функцию с такими параметрами:

func1 (10, 0);

Пример 2

Выражение проверки параметра на значение undefined в теле функции можно записать короче. Вот так:

function func1(par1, par2) {

if (!par2) par2 = 0; }

Значение undefined, будучи составной частью логического выражения, всегда преобразуется в значение false. В приведенном выше примере мы это и использовали.

Внимание!

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

func1(, 2);

пропустив его, это вызовет синтаксическую ошибку. Интерпретатор JavaScript не любит "пустых мест" в начале и середине списка параметров вызываемой функции.

Как передать функции произвольное число параметров?

Проблема

Нужно написать функцию, которая принимает произвольное число параметров. Как это сделать?

Решение 1

Внутри тела функции доступен массив arguments, элементы которого содержат все переданные функции параметры. Этот массив имеет свойство length, возвращающее количество элементов массива.

Пример 1

Вот объявление функции, принимающей произвольное количество строковых параметров и возвращающей строку, составленную из их значений:

function func2() {

var s = "";

var i = 0;

var с = arguments.length;

if (c > 0)

for (i = 0; i < c; i++) s += arguments[i]; return s; }

Выражение

var str = func2("Java", "Script");

поместит в переменную str строку "JavaScript".

Пример 2

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

function func3(pDelimiter) {

var s = "";

var i = 0;

var с = arguments.length;

if (c > 1)

for (i = 1; i < c; i++) {

s += arguments[i]; if (i != с - 1) s += pDelimiter; } return s; }

Выражение

var str = func3("+", "Java", "Script");

поместит в переменную str строку "Java+Script".

Решение 2

В конце концов, можно передать в функцию в качестве параметра массив с нужным количеством элементов.

Пример

Немного измененный пример функции func3:

function func3(pDelimiter, pars) {

var s = "";

var i = 0;

var с = pars.length;

if (c > 0)

for (i =0; i < c; i++) {

s += pars[i];

if (i != с - 1) s += pDelimiter; } return s; }.

Вызываться эта функция будет так:

var str = func3(" ", new Array("Java", "Script"));

после чего в переменной str окажется строка "Java Script".

Возврат из функции нескольких значений Проблема

Что делать, если какая-либо функция вычисляет не одно, а сразу несколько значений, и их все нужно вернуть? Стандартными средствами JavaScript (а именно оператором return) можно вернуть только одно значение.

Решение 1

1.  Вычисляем в теле функции все нужные значения.

2.  Создаем в теле функции массив.

3.  Помещаем вычисленные значения в элементы этого массива.

4.  Возвращаем полученный массив оператором return.

А уж извлечь значения элементов массива, возвращенного функцией, никакого труда не составит.

Примеры

Вот объявление функции, вычисляющей несколько значений и возвращающих их в массиве:

function someFunc() {

// Здесь помещаются выражения, вычисляющие нужные значения.

// Предположим, что всего их. три, и они помещаются в переменные

// valuel, value2 и value3.

var arr = new Array();

arr[0] = valuel;

arr[l] = value2;

arr[2] = value3;

return arr; }

Использование этой функции:

var a = someFunc(); var vl = a[0]; var v2 = a[1]; var v3 = a[2];

Вместо обычных массивов с числовыми индексами мы можем использовать хэша — массивы со строковыми индексами элементов. Например:

function someFunc() {

// Здесь помещаются выражения, вычисляющие нужные значения

// valuel, value2 и value3.

var arr = new Array();

arr["valuel"] = valuel;

arr["value2"] = value2;

arr["value3"] = value3;

return arr; } var a = someFunc(); var v1 = a["valuel"]; var v2 = a["value2"]; var v3 = a["value3"];


Пред. - След. »


RLBN.ru - Электроника и компьютеры

0.1556
Hosted by uCoz