セッター
メソッドだよ
メンバ変数に値を設定するよ
簡単に書くよ
セッター(英:setter)とは
オブジェクト指向なプログラミングの話で出てくる用語のひとつ
であり
メンバ変数に値を設定する仕事をするメソッドを指す俗称
です。
もう少し噛み砕いて書くと
クラス
(オブジェクト指向の話で出てくる概念のひとつで「設計図」っぽいやつ)の中にある変数に値を設定する仕事をしている(クラスの中にある)関数のこと
です。
詳しく書くよ
はじめに留意事項です。
本ページの説明は
・変数
・関数
・オブジェクト指向
・クラス
を何となく理解している前提で書いていきます。
これらの用語について「さっぱり、分からん!」な人は、先に、そっちを勉強してきてください。

準備はOKですか?
それでは順番に見ていきましょう。
オブジェクト指向なプログラミングにおいて、クラスの中には
1.変数
2.関数
の2つを用意できます。
クラスの中に用意する変数は、専門用語で「メンバ変数」と呼ばれます。
クラスの中に用意する関数は、専門用語で「メソッド」と呼ばれます。
以上を踏まえて
メンバ変数に値を設定する仕事をするメソッド
を指す俗称が「セッター(setter)」です。
少し正確性に欠けるけど分かりやすそうな表現を使うと
クラス内の変数に値を設定する関数
ですかね。
異論を唱える人もいますが
メンバ変数を外部から操作できるようにするのは良くないんじゃないかな?
な考え方があります。
Javaを例に説明しますが、例えば、以下のような書き方は「けしからん!」と考える人がいるのです。
class Piyota {
//メンバ変数
public String name;
}
public class test03{
public static void main(String[] args){
Piyota p = new Piyota();
//メンバ変数「name」に値を設定
p.name = "ピヨ太";
//メンバ変数「name」から値を取得
String piyotaName = p.name;
//画面表示
System.out.println(piyotaName);
}
}
この処理では
//メンバ変数「name」に値を設定
p.name = "ピヨ太";
で、Piyotaクラス内のメンバ変数「name」に直接、値「ピヨ太」を設定しています。
同様に
//メンバ変数「name」から値を取得
String piyotaName = p.name;
で、Piyotaクラス内のメンバ変数「name」の値を直接、取得しています。
このような書き方を見て「これはダメだ!クラス内のメンバ変数は隠ぺいするべし!直接、触らせるな!」と考えるのです。
そんな人は、同じ処理を例えば以下のように書きます。
class Piyota {
//メンバ変数
private String name;
//メソッド
void setName(String _name){
this.name = _name;
}
String getName(){
return this.name;
}
}
public class test01{
public static void main(String[] args){
Piyota p = new Piyota();
//メンバ変数「name」に値を設定
p.setName("ピヨ太");
//メンバ変数「name」から値を取得
String piyotaName = p.getName();
//画面表示
System.out.println(piyotaName);
}
}
違いが分かりますかね。
まず違うのは
private String name;
の部分です。
「public」だったのが「private」になっています。
「public」は「どこからでも触れるよ!」な指定です。
「private」は「クラスの外からは触らせないよ!」な指定です。
この変更によって、クラス「Piyota」のメンバ変数「name」は、クラスの外から触れなくなりました。
とはいえ、クラスの外からメンバ変数「name」を触りたい場合もあるでしょう。
そのために以下のメソッド(関数)を用意しました。
//メソッド
void setName(String _name){
this.name = _name;
}
String getName(){
return this.name;
}
「setName()」メソッドは、メンバ変数「name」に値を設定するときに使う関数です。
直接、メンバ変数「name」に値を設定することはできませんが、この関数を呼び出すことで、間接的にメンバ変数「name」に値を設定できます。
実際に値を設定しているのは
//メンバ変数「name」に値を設定
p.setName("ピヨ太");
の部分です。
「getName()」メソッドは、メンバ変数「name」から値を取得するときに使う関数です。
直接、メンバ変数「name」の値を取得することはできませんが、この関数を呼び出すことで、間接的にメンバ変数「name」の値を取得できます。
実際に値を取得しているのは
//メンバ変数「name」から値を取得
String piyotaName = p.getName();
の部分です。
このように「クラス内のメンバ変数は隠ぺいするべし!直接、触らせるな!」な人は
メンバ変数を直接触らせる代わりにメンバ変数を操作するメソッドを用意する
のです。
この「メンバ変数を操作するメソッド」のうち「メンバ変数に値を設定するメソッド」を指す俗称が「セッター(setter)」です。
「セット(set)」+「~する人(er)」で「セッター(setter)」ですね。
「人じゃないじゃん!」とツッコミたくなるかもしれませんが、ゆるく捉えてください。
ちなみに「メンバ変数から値を取得して呼び出し元に返すメソッド」は「ゲッター(getter)」と呼びます。
こちらは「ゲット(get)」+「~する人(er)」で「ゲッター(getter)」です。
気が向いたら、併せて覚えてあげてください。
セッター(setter)とゲッター(getter)の要・不要については、ベテランの間でも意見が分かれたりします。
お仕事でプログラミングをしているのであれば、現場の慣習に合わせておくのが無難だと思います。
一言でまとめるよ
まぁ「セッター(setter)」って単語が出てきたら「メンバ変数に値を設定するメソッドなんだな~」と お考えください。
おまけ
■訳してみるよ
「setter(セッター)」は「set(セット)」+「er」です。
「set(セット)」の意味は「(正しい場所に)置く」とか「(時間とかを)合わせる」とか「(期限とかを)設定する」とか「一組」とか「一式」とかです。
接尾辞「er」を付けると「~する人」とか「~するもの」的な意味になります。
何となく くっつけると
置くやつ
となります。






