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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

4回答

4080閲覧

Javaの文法について(PHPとの違い)

zico_teratail

総合スコア907

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

1クリップ

投稿2015/08/28 09:16

Javaでインスタンスを生成するとき、

Java

1Televison tv = new Television();

のように書くのは何故でしょうか?

たとえばPHPであれば

php

1$tv = new Television();

です。

PHPの書き方のほうがシンプルで分かりやすいと思うのですが、どういう意味・思想があって、Javaではあのような書き方をすることになっているのでしょうか?

もっと言えば、PHPerな素人の私から見ると、変数に「$」がつかないのも気持ち悪いというか、視認性に劣る気がします。

しかし世間的にはJavaのほうがいろいろと優れているという言説のほうが一般的です。
これらのPHPとの違いはなぜ・どのような理由で存在するのか、何が利点なのかを知りたくて質問させていただきました。

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

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

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

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

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

guest

回答4

0

JavaはPHPと違いコンパイル言語で、静的型付けなので、型を指定(宣言)する必要があります。
そうすることにより、コンパイル時に厳密にチェックされます。
必ずというわけではありませんが、コンパイル言語は静的型付けの場合が多いです。厳密に型を指定してある方がコンパイルも楽ですし。

PHPの書き方のほうがシンプルで分かりやすいと思うのですが

とありますが、私はどちらかというとPHPの方が苦手です。
PHPは型宣言をしないので、$tvTelevisionクラス、或いはそれを継承したクラスである保証が一切ありません。
しかし、Javaの場合は、一度Television型と決めたら、それ以外の値を入れることができませんし、Televisionクラス、或いはその親クラスに宣言されたメソッドしか呼べません(呼ぼうとするとコンパイルの時点でエラーになります)。

私はJavaの様な静的型付けの方が安心感などがありますが、煩わしい、面倒くさいと思う方も当然います。
静的型付けに慣れ親しんだ人と、動的型付けに慣れ親しんだ人の違い、つまり「好み」であって、どちらかが優れているというわけではありません。

$の有無ですが、PHPの様に変数の先頭に何かしらの決まり文句(PHPの場合は$)を入れるという方が特殊なケースかと思われます。
可読性についてですが、Javaの基本的な規約(クラス名の最初は大文字、変数名の最初は小文字、定数名は全て大文字、など)にのっとって記述してあるならば、変数を他のものと見間違えたり、他のものを変数と見間違えたりすることは、滅多にありません。

私はプログラミングの勉強はJavaから入った後にJavaScriptやPHPだったので、最初は動的型付けが取っ付きづらく苦労しましたが、今はどちらもある程度いけます。慣れです。
やっぱJavaはダメだな、と思われるならそれまでですが、もし興味がお有りなら頑張って下さい。
苦手な言語を頑張ろうと、得意不得意、好き嫌いが無くなるわけではありませんが、慣れてしまえば使えるようにはなります。

投稿2015/08/28 11:11

shiolier

総合スコア1156

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

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

zico_teratail

2015/08/28 13:10

>Javaの場合は、一度Television型と決めたら、それ以外の値を入れることができません >Televisionクラス、或いはその親クラスに宣言されたメソッドしか呼べません 今まで「動的型付けで具体的にどんなデメリットがあるの?」と思ってましたが、やっと静的型付けの意味やメリットが分かってきました。 そもそも今までPHPばかり(それもOOPではない)やってきたので今回のような疑問が湧いた次第です。 しかしJava(というよりもOOP?)について理解していくにつれて、だんだんといろいろなことが頭の中でつながってきました。
guest

0

どの言語がどの言語に対して劣っているとか、優れているとかは基本的にありません。
Javaが得意な分野もあればPHPが得意な分野も有ります。

一般的に大規模なWebアプリケーションを組む場合、PHPよりJavaが良いという話は私も聞きます。
また、PHPはWebアプリケーションしか作ることができません。
それをもってJavaのほうが優れているというわけではありません。

というのも逆を言えば、小規模から中規模のWebアプリケーションを組みやすいWebに特化した言語だからです。Javaが優れていなら、新しいページがPHPで作られることは無いでしょうけど、実際はWebの分野では最も一般的な言語の一つであり続けています。

また、PHPの魅力の一つとして、記述が簡単なため学びやすいというのがあると思います。そのせいで、高度なことができないと思われていたふしが有りますが、バージョンアップによっていろいろな機能が追加されています。PHPが劣っていると考えている人の一部には古いPHPを指して劣っていると言っている人もあるかもしれません。

PHPに比べ、Javaは簡潔が記述より明確な記述をする傾向がある言語だと思います。これは、大規模なアプリケーションだと明確にしないと間違いが起こりやすいことに起因していると思います。大規模なアプリケーションを混乱なく記述するためにJavaはいろいろな工夫をしています。

Javaを学んでいくと”面倒臭いなあ”という記述に度々合うことになると思います。しかし、Javaである程度大規模な開発をした後、PHPで書くと逆に”わかりづらいなあ”と思うこともあると思います。

また、変数の型がはっきりしているとコンパイルによって、実行速度がに格段に向上します。そのため、Javaでは変数を定義するときには型を指定します。変数に$を使うのはPerlとPHPくらい(?)なので、慣れの問題だと思います。

PHPの次にJavaを学ぼうとしているところ素晴らしいとおもいます。

投稿2015/08/28 10:35

iwamoto_takaaki

総合スコア2883

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

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

zico_teratail

2015/08/28 13:05

おっしゃるとおり、私も適材適所だと思います。 特にPHPに長年親しんでいるので、Web開発は圧倒的にPHPのほうが好きだし、個人的には手軽さなども含めて総合的に優れていると思っています。 JavaについてはAndroidアプリを開発したくなり、ある意味仕方なく(?)勉強を始めました。 ついでにOOPについても理解を深めたいです。
iwamoto_takaaki

2015/08/28 18:01

うーん。 ”他の言語も良いとこあるよ。1つの言語しか使えない人は、他の言語を悪く言うよ。”って思って書いたのですが、伝わらなくて残念です。
guest

0

ベストアンサー

私には逆に、なんの型の指定もなく入れられる言語の方が怖いです。
Javaでわかるのは、少なくともtvに入っているものはTelevisionかTelevisionを継承したオブジェクトです。
その後の代入でPhoneクラスがtvにぶちこまれることはありません。

PHP

1$tv = new Television(); 2$tv = new Phone();

これが可能であるほうが、Javaエンジニアには怖いのです。

「$」がないと気持ち悪いという気持ちは、あながち間違いではないです。
shellスクリプトなんかも$がないとダメですしね。
じゃあ、Javaは変数がわかりにくいの?って言うと、別にそんなこともないんです。
「規約に沿って書く」という前提が守られていれば、それほど読みにくいソースにはなりません。

PHPの優位性は、導入のしやすさ、保守の簡単さだと思います。
少なくとも、「ちょっと修正したから、サーバーに上げよう」と思うのはPHPで
Javaは「ある程度修正がまとまったらリリースしよう…」になります。

それぞれの言語は一長一短ですし、だからこそ言語戦争は今も絶えず起こっているのだと思います。

投稿2015/08/28 10:13

編集2015/08/28 11:22
anonymouskawa

総合スコア856

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

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

zico_teratail

2015/08/28 11:57

>少なくともtvに入っているものはTelevisionかTelevisionを継承したオブジェクトです。 >その後の代入でPhoneクラスがtvにぶちこまれることはありません。 納得できました。 私は一人で開発しているのであまりそのような心配をしたことがないのですが、複数人で開発したりするときには必要な機能(?)ですね。 変数については、「$」など接頭辞がついていたほうがIDEなどでコードに色づけするときに変数を見分けやすくなっていいなぁと思っています。 実際Android Studioのデフォルト設定では変数に色をつけてくれないので見づらいです。
guest

0

型宣言てヤツです。PHP は変数に型がない(ワケではないが…)ので
それが省略できるだけで、普通は必要です。
例えば int foo; と整数型で宣言した変数 foo に文字列を入れようとするとエラーになります。
PHP はこれがごちゃまぜになってもエラーにならないので、
コードが解りにくくなると言われています。

投稿2015/08/28 09:34

poliphilus

総合スコア150

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

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

zico_teratail

2015/08/28 09:49

型宣言するとして、 int x; char y; などは理解できますが、 なぜクラスだけは class z; という形ではなくて、 (具体的なクラス名) z; という形式で型宣言するのかが謎です。
raccy

2015/08/28 10:24

それぞれのクラスが独立した「型」だからです。classという一つの型に収まっているわけではありません。 intやcharを総称してプリミティブ型と呼ぶことがありますが、クラスを使った型(Javaの用語で言うとで参照型といいます)とはそのプリミティブ型と同じレベルの語彙で、各クラスでの型の総称でしかありません。
zico_teratail

2015/08/28 11:50

なるほど! そういう理屈なんですね。 やっと腑に落ちて理解できました。 JavaだけでなくOOP自体も初心者でclassの理解が曖昧でしたが、おかげさまで霧が晴れた気分です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問