2009-06-07 21 views
1

引数をゼロにし、戻り値の型を持たない関数を持つことはできますか?引数が0で、戻り値の型がない関数を持つことはできますか?

答えが「はい」の場合、これらの種類の関数はどこで使用されますか?

また、void関数が返すのはnull値またはゼロの値ですか?私は混乱しています。

+1

あなたが学んだ言語を指定してください。そうすれば、ユーザーがあなたの質問に答えることが容易になり、例が得られます。 – Shimmy

+0

はい、言語を指定する必要があります。多くの言語(C、C++、javascriptなど)では、「関数」という用語は副作用を持つサブルーチンと「純粋な」関数をカバーしています。 – Dipstick

答えて

2

多くの言語がvoidまたはその場合の似たようなの戻り値の型を宣言する必要がけれども私は、ゼロ 引数なし戻り値の型

はいと機能を持つことができます。

機能のこれらの種類を使用するには、

あなたが定義しない限り、「機能」は厳密には「ない副作用を持っている」を意味するように、彼らは、例えば、副作用のために役立ち便利です

これは無効にすることができるオブジェクトの一部です(この問題が発生すると一時的に無効になります)。

もちろん、副作用を全く許さない純粋な関数型言語では、このシナリオは不可能ですが、このような言語では戻り値のない関数は一般的に意味をなさないでしょう。

とも私の疑問のボイド 機能は、私は混乱していますNULL値またはゼロ 値を返すんものです。

何も返されません。どこでもそれを使用しようとすると、戻り値の型を生成することが予想されます(たとえば、別の関数のパラメータとして)、コンパイラエラーが発生します。

+0

私が考えるサンプルコードはあまり適切ではありません。メンバ関数は決して引数をもたない関数ではなく、暗黙の 'this'ポインタ/参照が常に渡されます。とにかく+1 –

1

たとえば、「hello world」や何らかの計算を印刷するだけの場合、パラメータを取ることができず、値を返す必要もありません。

はたとえば、あなたが実際にHTMLでWebページのフッターを出力PHP関数

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

を持つことができます。この関数はパラメータをとらず、何かを出力し、何も返さない。

それはあなたが

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

を言うとき、あなたは、この関数は関数定義の前で「無効」を使って、何も返さないと言っている、Cのような言語である場合。

私は昔、それを学んだとき、すべての関数は何かを返す必要があることをパスカルで覚えています。そうでなければ、それは代わりに「手続き」です。

2

これは、あなたが学ぶ言語を指定できる場合に役立ちます。

とにかく、私が知っている共通言語では、答えは「はい」です。 は時々あなたのためのものを行うための機能を持っている必要があり、引数を取らないと、ノーリターン値:

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 
} 
0

いや例えば、いくつかの計算結果を画面に出力することができます;)

5

の副作用を可能にする言語でのみ意味がありますを使用し、副作用が必要な場合にのみ使用できます。たとえば、コンソールアプリケーションで長時間実行される操作を考えてみましょう。ユーザーがあなたがブロックされていないことを知るように、画面に頻繁にドットを1つずつ印刷したい場合があります。

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

この関数は、引数を必要とせず、値も返しません。それ自体は意味があります。副作用を達成するために関数を呼び出す(画面を変更する)。

1

数学関数と混同しないでください。関数(またはプロシージャまたはサブルーチン)は、コードブロックの一部です。プログラマーが構造化されたコードを書くのを助ける。ルーチンの結果を望むなら、それを持つことができます。それで全部です。

0

プログラミング理論とほとんどのコンピュータ言語では、答えはノーです。関数には戻り値が必要です。

しかし、Cファミリ(C、C++、Java、Javascript、C#など)のような言語では、サブルーチンを戻り値のない関数と見なす退縮的な概念を使用しています。したがって、これらの言語では、答えは「はい」であり、そのような関数(実際にはサブルーチン)を使用して、環境的または文脈的な状態によって駆動される操作上の副作用を生成します。

関連する問題