質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

24308閲覧

関数とクラスの違いがいまいちわかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

2グッド

5クリップ

投稿2018/01/30 09:22

phpとjavascriptを使っているのですが、関数とクラスの違いがいまいちわかりません。
クラスは設計図のようですが関数も何度も使う物なので同じように感じてしまいます。

初心者にもわかるように教えていただければ幸いです。

teratail_begin, nikuatsu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

関数は状態を持ちません。状態とは関数を呼び出す前と関数を呼び出した後の、何かしらの値の事です。関数の中でグローバル変数を変更すれば、それは状態が変わったと言えるかもしれませんが、その関数にとって値が更新出来る物が1つに定まってしまいますよね。

そこで以下を見て下さい。

php

1<?php 2 3class Counter 4{ 5 protected $n; 6 7 public function __construct(int $n) 8 { 9 $this->n = $n; 10 } 11 12 public function result() 13 { 14 return $this->n; 15 } 16 17 public function add() 18 { 19 $this->n++; 20 } 21}

これは add と result というメソッドを持ったカウンタクラスで、初期値を与えられる様になっています。ですので以下の様に 3 からスタートするカウンタ c1 と 5 からスタートするカウンタ c2 をそれぞれ異なる値を保持したまま作る事が出来ます。

php

1$c1 = new Counter(3); 2$c2 = new Counter(5); 3 4$c1->add(); $c1->add(); $c1->add(); 5echo $c1->result(); # 6 が出る 6 7echo "\n"; 8 9$c2->add(); $c2->add(); $c2->add(); 10echo $c2->result(); # 8 が出る

投稿2018/01/30 09:34

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/30 10:13

ありがとうございます。 難しいですね。 状態とは関数の返り値の事ですか?
mattn

2018/01/30 10:17

いえ、ソースで示す通り $c1 や $c2 がそれぞれ持っている異なる値 n の事です。
mattn

2018/01/30 10:19

例えばこの n を使い、n の値に応じて動作を変えるといった事が出来ますよね。関数だとそれが出来ないのです。(グローバル変数を使わない限り)
退会済みユーザー

退会済みユーザー

2018/01/30 11:06

引数を使っても関数の場合は値を自由に変えて処理する対象の値を自由に変えることが関数だとできないという事でしょうか? すいませんPHPは本当に始めたばかりでJSであればもう少しわかるのですがこのレベルだとソースがいまいち把握できません
mattn

2018/01/30 11:12

関数の中で値を変えたとしても、関数を抜けると元の値に戻ってしまいますよね。 参照渡しを使って、関数が関数の外側の値を変更する事は出来ます。しかし変更したい物が増えてきたら、参照渡しの引数をどんどん増やさないといけなくなりますよね?もし同じ様な関数がいっぱいあれば、全ての関数を直さないといけなくなります。大変ですね。 クラスだと、そのクラスがメンバとして保持する値(上記で言う n)を増やしていけば良いので、ソースが汚れません。汚れるのはクラスのソースだけなのです。 一度、上記で書いたコードをテキストエディタなどに貼って、少し修正しながら動きを確認されると良いと思います。
退会済みユーザー

退会済みユーザー

2018/01/30 11:38

>>> 関数の中で値を変えたとしても、関数を抜けると元の値に戻ってしまいますよね。 参照渡しを使って、関数が関数の外側の値を変更する事は出来ます。しかし変更したい物が増えてきたら、参照渡しの引数をどんどん増やさないといけなくなりますよね?もし同じ様な関数がいっぱいあれば、全ての関数を直さないといけなくなります。大変ですね。 恐らく関数に複数の値を引数として指定すると、どんどん引数を増やしていかないといけないので、悪いソースになってしまう。 よってこのように引数が複数になる場合、関数とよく似ているが引数を増やさずに済むクラスを使うという事でよいでしょうか? おかげさまで何となくわかってきました。
mattn

2018/01/30 14:27

はい。その認識で良いと思います。クラスにはその他メリットがあって、クラスの中に保持する値を隠蔽してくれる働きがあります。以下はなんとなく理解して頂ければよいかと。 例えば人間という情報があります。人間という情報には名前、年齢、趣味があります。この情報を200人分管理しないといけません。 こういった場合、名前を200個、年齢を200個、趣味を200個、と変数を作るのではなく、人間という情報に名前、年齢、趣味、という属性を持たせ、それを200個持った方が管理しやすいですよね。これを簡単に行えるのがクラスです。
退会済みユーザー

退会済みユーザー

2018/01/31 02:10

ありがとうございます。 >>> こういった場合、名前を200個、年齢を200個、趣味を200個、と変数を作るのではなく、人間という情報に名前、年齢、趣味、という属性を持たせ、それを200個持った方が管理しやすいですよね。これを簡単に行えるのがクラスです。 >>> むずかしいですね。なんかJSのオブジェクトにも似ているなと思いました。 隠ぺいとはカプセル化の事でしょうか?変数を外から変更できないようにできるという事ですかね? とりあず初心者の私は、引数をいっぱい使いたい時に関数を使っても実現はできるが引数がいっぱいになるのは管理がしにくいので、そのような場合に関数ではなくクラスを使うと理解しておきます。 ありがとうございました。
guest

0

クラスは「構成要素 または 役割」、関数は「機能」と思うといいかもしれません。

例えば「ボールペン」というクラスがあったとします。
ボールペンの構成要素を大きく分けると、
「インクの色・ボディの色・インクの量」などの「データ」と
「ペンの後ろをノックするとペン先が出る」などの「機能」になります。

プログラムではこの「データ」を「プロパティ(変数)」として定義し、
「機能」を「関数(メソッド)」として定義します。

このクラスを使えば「赤色のインクが出るボールペン」「ボディが白いボールペン」など、「基本的には同じだけど、一部が違うもの」を簡単に表現ことが出来ます。これが「設計図」とも言われる所以です。


もう1つ例として、「ボールペンを管理するクラス」を考えます。
このクラスは「インクの無くなったボールペンを破棄する」「補充用ボールペンを購入する」などの機能(関数)を持っています。

一見するとクラスではなく関数だけあればいいようにも見えます。事実、PHPやJavascriptではクラスでなくても動作します。
ですが他の言語だと「全てのスクリプトは何らかのクラスでなければならない」という仕様になっているものがあります。
この場合、「ボールペンを管理するクラス」は「構成要素」と言うよりは「役割」と言った方が分かりやすいと思います。

なお、「役割」の場合でも「データ(プロパティ/変数)と機能(関数/メソッド)を持つ」という原則は変わりません。
「ボールペンを管理するクラス」のデータの例で言えば「補充する時は何本ずつ購入するか」などが考えられます。

投稿2018/01/30 11:03

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/31 03:30

わかりやすい例えありがとうございます。 「インクの色・ボディの色・インクの量」などの「データ」 がクラス内の変数。 つまりクラス内のメソッドに処理させる数値などのデータ 「ペンの後ろをノックするとペン先が出る」などの「機能」になります。 がクラス内の関数(メソッド) という事でよいでしょうか? そして、変数であるデータだけを変更すれば、関数の機能という処理を変えずに処理するデータだけを、関数のように引数を使わずに変えれるので、 関数より便利という事でよいでしょうか? 関数によく似ていますが、データだけを変えられるのが関数より便利な所でしょうか? つまり関数の進化版というイメージですかね?
sakura_hana

2018/01/31 04:13

全体的にその通りです。 例えばボールペンクラスに「書く」というメソッド(機能)を付けたとします。 「インクの色=黒」としたボールペンクラスの「書く」を呼び出せば「黒インクで書く」ことになりますし、「インクの色=赤」としたボールペンクラスの「書く」を呼び出せば「赤インクで書く」ことになります。 (つまり「書く」メソッドに引数を渡す必要は無い) こうして見るとクラスの方が便利そうではありますが、闇雲に使えばいいという訳ではなく、仕様や用途に応じた設計が必要です。 (例えば上記の「書く」メソッドも、もしかしたら引数でインクの色を指定した方が便利かもしれません) この辺は「オブジェクト指向」とか「コンポーネント指向」という考え方が示されているので、チラ見してもいいかもしれません(一段上の話なので参考程度に)。
退会済みユーザー

退会済みユーザー

2018/01/31 04:39

とてもわかりやすかったのでだいぶわかりましたありがとうございます。 クラスは関数と似ているが、関数よりもっと便利に再利用ができる機能なのですね。 関数だと引数だらけになって使いにくいと思った時に、クラスを使うのですね。 また、ゲームをJSで作った際にデータを保存して、置きたいことがあります。例えば現在どのステージをplayしているかや今までの総合得点などです。 このような場合、グローバル変数を使わないと情報が初期化されてしまいますが、クラス内の変数であれば保持できるのでしょうか? これも関数内の変数にはないクラスのメリットですか?
sakura_hana

2018/01/31 06:21 編集

「クラスにすれば保持される」ということはありません。クラスをグローバル変数に入れれば保持されるとは思いますが、私はJSは詳しくないのではっきりとは言えません。 今回の質問とは本質的に異なる質問なので、自分で試してみるか別質問として投稿した方が確実だと思います。
退会済みユーザー

退会済みユーザー

2018/01/31 06:52

了解しました。ありがとうございました。
guest

0

ベストアンサー

関数はデータ(引数)を入力したらなにかしら結果を返す一連の処理をまとめたヤツです。
基本的に同じデータを入れたら同じ結果を返す処理が好ましいです。基本的にです。
(乱数を返すとか時間を返すとかクロージャ使うとか意地悪は今回ナシで)

クラスはデータ(メンバ変数)の保持と、そのデータに対して作用するメソッド(メンバ関数)を一塊としてまとめたヤツです。
いろんな機能を詰め込めますが、使う時に実体化(new)させたりちょっと手間がかかります。
同じデータを入れても、メソッドを呼び出す順序や回数で結果が変わってくるような処理が大得意です。
データ(状態)をカプセル化し、他のプログラムからデータが変更されるのを防ぐといった使い方も得意です。(設計しだいですが^^)
ただ複雑に多機能化しすぎるとテスト・デバッグが難しい厄介なクラスが出来上がったりします。
なんでも詰め込めまずに、役割分担の設計バランスが重要になってきます。

投稿2018/01/30 11:01

編集2018/01/30 11:40
so87

総合スコア764

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/31 02:27

むずかしいですね。mattnさんの回答を見ると、なんかJSのオブジェクトにも似ているなと思いました。 とりあず初心者の私は、引数をいっぱい使いたい時に関数を使っても実現はできるが引数がいっぱいになるのは管理がしにくいので、そのような場合に関数ではなくクラスを使うと理解しておけばいいのですかね? また、ご回答をみると、関数は常に同じ処理をするがクラスは行う処理自体も柔軟に変更できるようですね。 つまり、関数よりもっと自由に処理を変更できるという事ですかね? 例えれば関数はただの白米をたくことしかできない炊飯器。 クラスはおかゆも、パンケーキもたくことができ、プログラマーが、パンケーキボタンを選択すればパンケーキがつくれる、多機能型炊飯器のようなものでしょうか?
so87

2018/01/31 05:04 編集

ざっくりそんな感じでいいと思います。 投げる引数が多すぎるのは関数でもクラスでも好まれません。 例えばですが、炊飯器ならこんなクラス設計だとインターフェース(メソッド名)だけで動作が想像できます。 const rice = Cooker.setup('コシヒカリ')   .riceMax(3000)   .addRice(6000)   .addWater(200)   .setTime(1000*60*45)   .cook()   .getItem(); 悪ノリすると const rice = Cooker.setup('コシヒカリ')   .addRice(6000)   .addWater(200)   .setTime(1000*60*45)   .cook()   .addWater(200)   .addWater(200)   .getItem(); 炊き上げた後に200mlを2回も注水!!食べれるのそれ!みたいな事もインターフェースだけで想像できます。 cook後はaddWaterできないようにしたりすると、より使いやすいクラスとなりますが、 機能性が増すほど仕様とバグが入り乱れてきます。 お米が炊きたいだけなのに、なぜか最初にお箸かスプーンをプロパティとしてセットしないと炊けない! みたいな糞クラスを作る方々もいらっしゃいますし、クラスは設計力が問われます。 話が脱線しました。 関数の場合は単純に関数化しちゃうとこんな感じですよね。パット見引数の意味がわかりません。 const rice = riceCook( 'コシヒカリ', 3000, 6000, 200, 1000*60*45 ); 今回のような機能性の関数だと、オプションはオブジェクトにすべきでしょう。 const rice = riceCook( 6000, 200, {   type:'コシヒカリ',   riceMAx: 3000,   waterMax: 1000,   cookTime: 1000*60*45 }); どちらで実装しても、とりあえず同じ引数を渡せば決まったご飯が出てきます。 水の入れるタイミング、炊くタイミング、それはriceCook関数のみぞ知るところです。 ただしriceCookの実装がどんな事になっていようと、ちゃんとした関数なら他に影響を与えないので安心して使えます。おそらくお箸をセットする必要もないでしょう。 柔軟性はないですがシンプルで、テストもしやすいはずです。
退会済みユーザー

退会済みユーザー

2018/01/31 07:04

ありがとうございました。 ・関数で行う場合 引数がなんだかわかりくいのでクラスでやった方が、わかりやすいが、どちらでも同じ処理ができる。 const rice = riceCook( 'コシヒカリ', 3000, 6000, 200, 1000*60*45 ); わかりにくいのでせめて、今回のような機能性の関数だと、オプションはオブジェクトにすべきでしょう。 const rice = riceCook( 6000, 200, {   type:'コシヒカリ',   riceMAx: 3000,   waterMax: 1000,   cookTime: 1000*60*45 }); ・クラスで同じ処理を行う場合、メソッドを見ただけで何をやっているのかわかるので関数より見やすい。(しかし、関数でも同じ処理はできるのであくまで見やすくなるのが唯一の違い) const rice = Cooker.setup('コシヒカリ')   .riceMax(3000)   .addRice(6000)   .addWater(200)   .setTime(1000*60*45)   .cook()   .getItem(); という認識でよいのでしょうか?
so87

2018/01/31 09:42 編集

そうですね。クラスで「同じ処理を行う場合」はそれだけの違いです。 クラスはデータ(状態)とそれを操作する関数(メソッド)がセットになったもので、 関数はデータ(状態)を持っていない、が一番の「根本的な違い」で、 その違いからどういった「使い方の違い」がでるのか。 どちらも白米は炊けますが、 クラスはマニュアル操作が得意で、操作しやすようにUIも見やすく出来る。 関数器はボタン一発フルオート。 見た目(使いやすさ)と柔軟性(呼び出し順序による処理結果の変化)の違いがでてきます。 この2つが「使い方での大きな違い」です。 プログラムのような抽象的な概念を学ぶには、定義といった説明だけでは理解し辛いです。 まずは小さなことから初めて、多くの具体的な事例を経験することが大事ですので、 間違ってもいいので、両方のアプローチをどんどん試してみてください。
退会済みユーザー

退会済みユーザー

2018/01/31 13:25

ありがとうございます。 >>> 関数はデータ(状態)を持っていない、が一番の「根本的な違い」で、 その違いからどういった「使い方の違い」がでるのか。 子のデータとはクラス内の変数の事ですよね? 関数もローカル変数を作ることはできますが、これとの違いがよく初心者にはわかりません。 色々質問してしまい大変恐縮ですがどう違うのかなぜ同じではないのか教えていただければ幸いです。
so87

2018/02/01 05:11 編集

なるほど、クラス内の変数と関数内のローカル変数の違いですね。 クラスというのは実際の所、ただの設計書でして、 使うためには実体化(製造)する必要あります。 その実体化されたオブジェクト(インスタンスといいます)を使って処理をしていきます。 クラス内の変数はそのインスタンスがメモリから消えるまでインスタンス変数として存続します。 これを自分も含めプログラマは「状態を持つ」というような表現をしがちでして、慣れないとわかりづらいですね。 関数のローカル変数は発揮性が高く、 関数コールと共にメモリ内に生成され、終了するとメモリから消えます。 このことを「状態を持たない」という言い回しで表現される事が多いです。 今回例にした炊飯器クラスは実体化してないように見えるので、記述例としてあまり好ましくなかったですね。 Cooker.setup内で実体化して、インスタンスを返却し、 メソッドチェーンという手法で設計すると、あのような記述になります。 普通のクラス設計ならばこのような記述になるでしょうね。 const cooker = new Cooker('コシヒカリ'); cooker.riceMax(3000); cooker.addRice(6000); cooker.addWater(200); cooker.setTime(1000*60*45); cooker.cook(); const rice = cooker.getItem(); クラスはいろんな設計パターンがあり、その先にはオブジェクト指向という概念が登場してきますので、 関数とクラスの使い所がつかめてきたら、さらに先に進んでいけると思います。 関数は関数で奥深いです。 「どっちでもいい、どっちかしか使わない」ではなく、 バランス良く用途にあわせて使っていけるのがjavasriptとphpの魅力かと思います。
退会済みユーザー

退会済みユーザー

2018/02/02 06:40

ありがとうございます。 返事遅れてすいませんでした。 >>> その実体化されたオブジェクト(インスタンスといいます)を使って処理をしていきます。 クラス内の変数はそのインスタンスがメモリから消えるまでインスタンス変数として存続します。 これを自分も含めプログラマは「状態を持つ」というような表現をしがちでして、慣れないとわかりづらいですね。 関数のローカル変数は発揮性が高く、 関数コールと共にメモリ内に生成され、終了するとメモリから消えます。 このことを「状態を持たない」という言い回しで表現される事が多いです。 >>> 関数は仰る通りグローバル変数以外はページリロード時に行う処理が終わると、揮発してなかった事になってしまいます。 よってゲームのsutagenumなどは、いつもグローバル変数に再代入して保持しています。 それに対してクラス内の変数は、グローバル変数のようにリロード時の処理が終わった後も残っているという事でよいでしょうか? それともグローバル変数と関数内の変数の間くらいの残り方なのでしょうか? インスタンスがメモリから消えるのはどんな時なんですかね? PHPはちゃんとしたクラスがあるのにjsはまだプロトタイプの進化版程度のクラスもどきしかないようですね。今後ちゃんとするんでしょうが
so87

2018/02/02 09:49 編集

ローカル変数は変数スコープ(関数の場合は関数)を抜けると終わりです。 そしてインスタンスもローカル変数に代入するので、基本的には変数スコープを抜けると終わりなのですが、厳密な話をしだすとアクセス手段がないというだけで消えてはいません。 ちょっと難しい話になってくるのですが、 インスタンスがメモリから消えるタイミングは、昨今の言語ではガベージコレクション(GC)という ゴミ収集車みたいなやつが削除してよいと判断し、削除を実行した時という言い回しになってしまいます。 そして、webサーバーのモジュールとして動かすphpの場合は、 1リクエスト毎に1プロセスが作られ、リクエストが終了すればプロセスが終了するので、 GCで消えるというよりもプロセスの終了によりインスタンスが消える、というようなイメージをしていたほうがいいかもしれません。 ただし、phpでもApacheやnginxの力を借りず、 1プロセスを使いまわすような設計で組み込みWEBサーバーを実装すれば、 リロードで消えない挙動も実現できることでしょう。 phpで組み込みWEBサーバーはちょっと自分もやったことはないので難易度が高そうですが、 phpでソケットサーバー程度ならちょくちょくある話で、その時は関数のみでやるよりも、 オブジェクト指向とクラスの力を頼ったほうが、開発効率は良いと思います。 ブラウザで動かすJavascriptもリロードで生成したインスタンスは消えます。 リロードという行為により、いったんプロセスが終わるため、メモリからプログラムが解放されインスタンスは消えるということです。 Javascriptのclass構文は確かにprototypeの糖衣構文ですが、 自分的には継承周りでだいぶ楽になりましたよー。 物足りないと感じたならばTypescriptやScala.jsといったAltJSとかでしょうかねぇ^^
退会済みユーザー

退会済みユーザー

2018/02/04 04:05

ありがとうございます。別質問にした方がよろしければ別質問にします。 >>> 変数のスコープとは、その変数が参照できる範囲のことです。 とあったので変数スコープとは関数スコープ内の変数なら、関数スコープ内がその変数の変数スコープになるという事ですかね。 つまり、その変数はその関数内でないと一切利用できないという事ですね。 >>> そしてインスタンスもローカル変数に代入するので、基本的には変数スコープを抜けると終わり 関数のローカル変数は発揮性が高く、 関数コールと共にメモリ内に生成され、終了するとメモリから消えます。 このことを「状態を持たない」という言い回しで表現される事が多いです。 つまり関数のローカル変数は、その関数の処理が終わったらないしは関数のスコープ外では消えてしまうという事で良いでしょうか? クラス内の変数もクラス内の処理が終わると消えてしまうという事は、関数内の変数と同じように見えるのですが、 クラス内の変数との違いがいまいちわかりません。 基本はこの通り同じだが、厳密な話をしだすとアクセス手段がないというだけで消えてはいないという事が唯一の違いという事でしょうか? つまりクラス内の変数が本当に消えるのは、クラス内を出た時ではなく、 GCで消えるというよりもプロセスの終了によりインスタンスが消える、というようなイメージという事でしょうか?
so87

2018/02/05 07:52 編集

>その変数はその関数内でないと一切利用できないという事ですね。 そのとおりです。  >つまり関数のローカル変数は、その関数の処理が終わったらないしは関数のスコープ外では消えてしまうという事で良いでしょうか? はい。スコープをぬければ消えてしまいます。  >クラス内の変数との違いがいまいちわかりません。 これはクラスを実体化(インスタンス化)する、という行為にピンとこられていないのかなと思いました。 「変数」と「その中に入る値」は別物というご理解はありますでしょうか。 変数は名前がつけられる器であり、インスタンスとは器に入れるモノです。 そして器が消えるタイミングとモノが消えるタイミングは別です。 器が消えても、モノが残っていれば利用できます。 そして、クラスの変数(インスタンス変数)とは「モノの中に入っている、器」のことです。 実体化されたインスタンスのインスタンススコープの中で生きてます。 (状態が持てると表現)  >インスタンスもローカル変数に代入するので、基本的には変数スコープを抜けると終わり 私が混乱する言い方をしてしまいましたね。 インスタンスの消えるタイミングはちょっと脱線気味かな~と思ったので、変なニュアンスとなってしまいました。 一つのコードブロックだけでみると書き方の違いしか見えてこないかもしれませんが、 複数行に渡って処理を分割できるクラスは、別のスコープにインスタンスを渡すだけで、気軽にそのクラスの機能(インスタンス変数だったりメソッド)が利用できるということでもあります。この性質をうまく使えるようになると、関数とクラスの使い分けが出来るようになったと言えるでしょう。  >GCで消えるというよりもプロセスの終了によりインスタンスが消える、というようなイメージという事でしょうか? 条件付きです。PHPとJavascriptならば、そのイメージで初心者の方はOKです。GCはいっかい忘れて下さい。なぜならPHPは1リクエストでプロセス終了、Javascriptもページ遷移またはリロードすれば、 雑なメモリ管理でも問題となることが少ないため、危険な言い方ではありますがなんとかなります。 (いろんな人に怒られそう><) ただ中級者以上ではそうはいきませんので、 クラスの挙動は私の説明のような乱雑なざっくりイメージだけでは危険です。 時が来ましたら、改めて正しいクラスの挙動を勉強してください。 慣れるまでは当初の趣旨通り、引数の数で使い分けて良いと思います。 道具って仕組みはわからなくても、数をこなせば使いこなせますよね。 例えば1+1=2という証明方法・理屈を知らなくても、足し算という道具は使いこなせます。 使いこなすための最初の突破口として「引数の数」はありでしょう。
guest

0

データとそのデータに対する操作を行う関数をまとめて持つ型がクラスです

投稿2018/01/30 09:33

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

関数はいわゆるサブルーチンです。大雑把に言えば下請け処理です。

クラスは複数の関数と変数を包括して定義できる概念です。一方、この概念を実体化したのものはオブジェクト(インスタンス)といいます。

投稿2018/01/30 11:56

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/31 03:33

関数をさらにまとめた関数などのグループ、処理の塊という事でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問