Могу ли я иметь функцию с нулевыми аргументами и без возврата typelang? - PullRequest
1 голос
/ 07 июня 2009

Могу ли я иметь функцию с нулевым аргументом и без возвращаемого типа?

Если ответ «да», то где вы используете такие функции?

Кроме того, что возвращает функция void, нулевое значение или нулевое значение? Я в замешательстве.

Ответы [ 7 ]

5 голосов
/ 07 июня 2009

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

void printdot() {
   printf( "." );
}

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

2 голосов
/ 07 июня 2009

Могу ли я иметь функцию с нулем аргументы и без типа возврата

Да, хотя многие языки требуют, чтобы вы объявляли тип возврата void или что-то подобное в этом случае.

где использовать эти виды функций,

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

public void invalidate()
{
    this.invalid = true;
}

Это будет часть объекта, который может быть признан недействительным (и останется недействительным постоянно после того, как это произошло).

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

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

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

2 голосов
/ 07 июня 2009

Было бы полезно, если бы вы могли указать, какой язык вы изучаете.

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

VB:

Sub DoAction() 'Takes 0 parameters
    'Do actions
    'Doesn't return a value
End Sub

C #:

void DoAction() //Takes 0 parameters
{
    //Do actions
    //Doesn't return a value
}
1 голос
/ 07 июня 2009

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

1 голос
/ 07 июня 2009

Да, например, если функция просто выводит «hello world» или какой-то расчет, то она не может принимать никаких параметров и вообще не должна возвращать никаких значений.

Например, у вас может быть функция PHP

function printPageFooter() {
    echo "<p>Thanks for coming.  Come back soon!</p>\n";
}

, который фактически печатает нижний колонтитул веб-страницы в HTML. Эта функция не принимает параметров и что-то печатает, и ничего не возвращает.

Если это такой язык, как C, то когда вы говорите

void PrintPageFooter() {
  /* do something */
}

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

Я помню, в Паскале, когда я изучил это давным-давно, все функции должны что-то возвращать. Если это не так, то вместо этого это «процедура».

0 голосов
/ 07 июня 2009

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

Однако некоторые языки, такие как семейство C (C, C ++, Java, Javascript, C # и т. Д.), Используют вырожденную концепцию функции, которая рассматривает подпрограммы как функции без возвращаемого значения. Таким образом, на этих языках ответ «да», и вы будете использовать такие функции (которые на самом деле являются подпрограммами) для генерирования операционных побочных эффектов, вызванных состоянием окружающей среды или контекстным состоянием.

0 голосов
/ 07 июня 2009

да, конечно, вы можете, например, он может распечатать некоторые результаты расчетов на экран;)

...