第一級オブジェクトとは (Python/JavaScriptの例)

目次

第一級オブジェクトとは

以下がすべてできるものを第一級オブジェクトと呼びます。

・変数に代入できる

・関数の引数として渡せる

・関数の戻り値として返せる

・配列やオブジェクトなどに格納できる

 

Pythonの主な第一級オブジェクト

Pythonでは関数もクラスも第一級オブジェクトという設計思想になっています。

そのため、関数を辞書に入れられる、クラスを関数に渡せるというような柔軟なコードが書けます。

数値型(int / float / complex)、文字列(str)、ブール型(bool)、None、
リスト(list)、タプル(tuple)、辞書(dict)、集合(set)、
関数(function)、ラムダ関数(lambda)、クラス(class)、メソッド、モジュール等

JavaScriptの主な第一級オブジェクト

関数、オブジェクト、配列、クラス(実体は関数)、プリミティブ値等

Pythonの関数の場合

Pythonでは関数は第一級オブジェクトです。

1.変数に代入できる

def add(a, b):       # 関数
    return a + b

f = add          # (1) 変数に代入できる
print(f(2, 3))   # 5

2.引数に渡せる

def add(a, b):       # 関数
    return a + b

def execute(func):  
    return func(10, 20)

print(execute(add))  # 30 (2) 引数に渡せる

3.戻り値にできる

def add(a, b):       # 関数
    return a + b

def get_func():      
    return add  # (3) 戻り値にできる

print(get_func()(1, 2))  # 3 

4.配列やオブジェクトなどに格納できる

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

operations = {"add": add, "sub": sub}  # 30 (4) 辞書に格納
print(operations["add"](4, 2))  # 6

JavaScriptの関数の場合

1.変数に代入できる

function add(a, b) {   // 関数
  return a + b;
}

const f = add;         // (1) 変数に代入できる
console.log(f(2, 3));  // 5

2.引数に渡せる

function add(a, b) {      // 関数
  return a + b;
}

function execute(func) {
  return func(10, 20);
}

console.log(execute(add));  // 30  (2) 引数に渡せる

3.戻り値にできる

function add(a, b) {      // 関数
  return a + b;
}

function get_func() {     // 関数を返す
  return add;  // (3) 戻り値にできる
}

console.log(get_func()(1, 2));  // 3 

4.配列やオブジェクトなどに格納できる

function add(a, b) {
  return a + b;
}

function sub(a, b) {
  return a - b;
}

const operations = {
  add: add,
  sub: sub
};  // (4) オブジェクトに格納

console.log(operations["add"](4, 2));  // 6

関数が第一級オブジェクトの主なプログラミング言語

すべての言語で関数が第一級オブジェクトとは限りません。

関数が第一級オブジェクト

Python、JavaScript、Java(8以降)Go、Rust、PHP、Ruby等

関数が第一級オブジェクトではない

C、古いJava(8以前)等

関連の記事

コールバック関数と高階関数の違い(Python/JavaScript)

△上に戻る