関数定義・メソッド定義
Go言語 (golang) 2015/02/13
関数定義の例
func f() string {
...
return ...
}
Java 2015/03/23
Javaではクラスに属するメソッドはあるが、クラスの外にあるトップレベルの関数は存在しない。 Java8からはラムダ式)がある。ラムダ式もJVM上ではメソッドである。
メソッドの定義は、クラス定義の中に書く。
public String f(String arg1, int arg2){
...;
return ...;
}
返り値がない場合の例
public void f(String arg1, int arg2){
...;
}
Scala 2016/10/16
メソッド定義の例
def f(arg1: String, arg2: Int): String = {
...;
}
最後の式が自動で返り値になるので、途中で関数から脱出する場合をのぞいてreturn
は省略できる。
Scalaのメソッド定義はJavaと違って
def f(引数リスト): 戻り値の型 = 式
である。メソッド本体はJavaのように中括弧で囲むことは不要で、式を書くことになっている。式を複数書く目的の{ ... }
(中括弧)自体もScalaでは式であり、中括弧の中の最後の式が中括弧全体の結果になるので、メソッド本体に式を複数書く必要がある場合は中括弧で囲む。メソッドの本体が式1つで済む場合は中括弧を使わないことが多い。
返り値が Unit
の場合(Javaでいうとvoid
で返り値がない場合)は、以下でも可。
def f(arg1: String, arg2: Int) {
...;
}
引数がない場合はカッコを省略できる。
def f: String = {
...;
}
返り値の型が明確な場合は型を省略できる。
def f = ...;
メソッド定義の中に入れ子でメソッド定義を書くこともできる。この場合、内側のメソッドは、すぐ外側のメソッドの中からしか参照できない。
Groovy 2014/10/24
def f(arg1, arg2) {
...
}
最後の式が自動で返り値になるので、途中で関数から脱出する場合をのぞいてreturn
は省略できる。
PHP 2014/05/09
関数定義の例
function f($arg1, $arg2){
...;
return ...;
}
関数定義・メソッド定義では引数のカッコを省略不可。
関数定義はグローバルにある必要はなく、別の関数の中であったり、
if
文などの制御構造の中にあってもよい。ただ、定義された関数自体は常にグローバルになるので、関数の中で定義された別の関数は、定義後はいつでもグローバルから呼び出すことができる。
制御構造や関数の中で定義された関数は、関数定義の部分が実行されないと、その関数を呼び出すことはできない。呼びだそうとしても
Call to undefined function
と言われる。
トップレベルで定義した場合は、定義よりも上の部分からであってもその関数を呼び出すことができる。
関数名は大文字小文字を区別しないが、普通は定義時と呼び出し時とで大文字小文字を一致させる。
ユーザー定義関数 | PHP Manual
http://www.php.net/manual/ja/functions.user-defined.php
Smarty 2015/12/08
関数定義の例
{function f arg1='default value' arg2='default value 2'}
...
{/function}
参考: 関数呼び出し
仮引数の名前として name
は使えない。
{function f name=false}
と書いたら、関数名が 'false'
になってしまい、
unknown tag "f"
というエラーメッセージが表示されてしまう。
function
| Smarty Manual
http://www.smarty.net/docs/ja/language.function.function.tpl
Python 2014/04/16
Pythonの関数はオブジェクトであり、関数定義できるdef
文では、関数オブジェクトを生成してそれを変数に代入する。関数名は他と同じ普通の変数である。関数定義は普通の変数への代入と同じなので、関数定義の中でも、関数定義を置くことができる。
def
文の例
def f(arg1, arg2):
...
return ...
関数定義では引数のカッコを省略不可。
関数呼び出しでは引数のカッコを省略不可。
返り値を指定するにはreturn
文が必須で、最後の式が自動で返り値になることはない。
関数定義は変数への代入と同じなので以下のようなことも可能。
def f():
...
g = f
g()
Ruby / JRuby 2014/05/21
クラス定義の中にメソッドを書く。トップレベルにもメソッド定義を書けるがこれは Object
のprivate
メソッドの扱いになり、どこからでも呼び出せるメソッドになり、他の言語でのグローバルの関数として使える。
メソッド定義の例
def f(arg1, arg2)
...
return ...
end
メソッド定義では仮引数のカッコを省略可。メソッド呼び出しでは引数のカッコを省略可。
メソッドの中の最後でreturnする場合は、return
と書かないのが多い。
最後の式がメソッドの返り値になるため。
特異メソッドを定義する例
def obj.f(arg1, arg2)
...
return ...
end
または
class << obj
def f(arg1, arg2)
...
return ...
end
end
グローバル変数は $
で始まる名前になっていて、メソッドの中からグローバル変数を参照することはできる。
Perl 2016/07/25
サブルーチンの定義の例
sub f {
my ($arg1, $arg2) = @_;
...;
return ...;
}
インスタンスメソッドの定義の例
sub f {
my ($this, $arg1, $arg2) = @_;
...;
return ...;
}
クラスメソッドの定義の例
sub f {
my ($class, $arg1, $arg2) = @_;
...;
return ...;
}
サブルーチン定義の中では引数は、@_
, $_[...]
などで参照する。
サブルーチンの中でサブルーチンを定義することもできるようだが、中のサブルーチンは外からも呼び出せてしまうようだ。
sub f {
...;
sub g {
...;
}
...;
}
f(...);
g(...); # => No problem
sh (シェルスクリプト) 2014/09/29
関数の定義。
f()
{
...
return 0
}
スタイルはなんでもよくて、
f() {
...
return 0
}
f() { ...; return 0; }
でもよい。
関数の呼び出し。
f a1 a2
- 関数定義の中では引数は
$@
,$1
,$2
,,, などを使う。 -> 特殊な変数 - 関数呼び出しは通常の外部コマンドの呼び出しと同じくカッコを付けずに引数を並べる
return 0
のように書くと関数の処理から戻り値を指定して脱出できる。return
文はなくてもよい。
JavaScript 2013/10/10
function f(arg1, arg2){
...;
return ...;
}
- 関数定義と呼び出しでは引数のカッコを省略不可
CoffeeScript 2013/04/28
(arg1, arg2) ->
...
...
引数がない場合
->
...
...
- 関数呼び出しは、引数がある場合はカッコを省略可。引数がない場合はカッコを省略できない。