Java入門・初心者質問スレ Part.8

■ このスレッドは過去ログ倉庫に格納されています
2018/06/07(木) 20:17:08.87ID:N8MsK2gr0
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.7
http://mevius.5ch.net/test/read.cgi/tech/1515549964/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured
2018/11/19(月) 18:13:02.26ID:vHw2N8A80
>>733
自分1人しか弄らないなら好きにすればいいよ。
どうせならローマ字じゃなくて漢字や平仮名を使って日本語でそのまま命名することもできるから試してみるといい。

ただし一般論、というか仕事でやる開発なら英語で統一するのが普通なのでそれは忘れちゃいけない。
2018/11/19(月) 18:31:24.19ID:Je8g3va9d
入門に出てくるようなクラス名は普通に出てくる単語ばっかだろうからさっさと覚えたほうがいいでしょ
2018/11/19(月) 18:39:15.60ID:97DIZmBta
>>733
ソース見たけど、確かにkaifukuryoとか死ぬほど読みにくいから、これならいっそ「回復量」の日本語でもいいと思うw
2018/11/19(月) 18:40:59.11ID:97DIZmBta
うちの社内システムは何年も前から部分的に日本語変数名も使ってるけど、特に問題が起きたことはないよ

ただこの話題で議論が紛糾して荒れるのをネットで見かけるから、何がなんでも絶対に許さない人達がいるのは間違いないw
738デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.135.194])
垢版 |
2018/11/19(月) 20:51:25.27ID:C68x9bSia
うちの会社でうっかりそんなことしたら中国語で溢れるよ。あとドイツ語と英語。

あ、英語はいいのかw
2018/11/19(月) 23:59:34.33ID:qLcuYLw7a
総称型配列を生成したい…リフレクション使えばいける?
2018/11/20(火) 00:24:59.86ID:n8v7mGgD0
答えてくれた方、ありがとうございました。
なるべく英語で行くようにしたいと思います。
2018/11/20(火) 00:28:00.33ID:MPotoW9R0
ローマ字は特に気にしないけどおかしな英語だとモヤる
登録でregistってなんやねん
2018/11/20(火) 01:25:13.23ID:+ftLPXCpa
>>739
Array.newInstanceの結果をダウンキャスト
警告が出るが気にしない
外から引数でClass<T>を受け取るようにすれば多少はタイプセーフ風な雰囲気を醸し出せるかもしれない
Javaのジェネリックがハリボテの糞と呼ばれる所以だ
743デフォルトの名無しさん (ワッチョイ 7fd2-RJIg [27.139.3.34])
垢版 |
2018/11/20(火) 01:33:24.00ID:8KtihEK80
>>741
すまん。昔量産してしまった
区分フラグとかも
2018/11/20(火) 01:42:27.99ID:MPotoW9R0
>>743
まあモヤるレベルだから別にいいんだけどさ
終わりの見えない関数とか、読み解くと結局意味のない処理とか、Objectに全てを詰め込み中身を変えまくる黒魔術に比べたら可愛いもんさ、ハハハ……
2018/11/20(火) 01:55:25.40ID:X8QFm2fdM
Javaのジェネリクスが単なるObjectのシンタックスシュガーであることを考えると、
総称型の配列などというものは存在自体が常に虚偽であり明らかに矛盾していることがわかるだろう
Javaで総称型の配列が欲しいときは、ArrayList<>(これは実はObject[]をラップしている)を使うか、
単にObject[]を使っておいて辻褄合わせが必要なときに要素を適宜ダウンキャストしてやるかのどちらかだ
Javaのジェネリクスでは型の整合性を維持するのはジェネリックなメンバやクラスを作るプログラマの責任なんだよ
通常のアプリケーションコードで積極的に作るものではない
2018/11/20(火) 22:41:13.06ID:QYuuoNJVd
silverの問題集の解説見ながら勉強してるけどコンスタントプールってのがあるんだなぁ(こなみかん)
747デフォルトの名無しさん (ワッチョイ 2361-A3/R [118.13.134.7])
垢版 |
2018/11/23(金) 21:42:39.82ID:UR66aWLO0
cyclopsを使ってダサいTRY-CATCHを改善してみたがカッコイイ

public static javafx.scene.image.Image loadImageFromFile(@NotNull Path path, double w, double h) {
return Try.withResources(() -> new FileInputStream(path.toFile()),
stream -> new javafx.scene.image.Image(stream, w, h, true, true),
IOException.class)
.onFail((e) -> GUICommon.debugMessage("loadImageFromFile >> File not found : " + path.toString()))
.get()
.orElse(null);
}

public static javafx.scene.image.Image loadImageFromURL(@NotNull URL url, double w, double h) {
return Try.withCatch(url::openConnection)
.peek(conn -> conn.setRequestProperty("User-Agent", "Wget/1.13.4 (linux-gnu)"))
.peek(conn -> conn.setRequestProperty("Referer", customReferrer(url, null)))
.flatMap(conn -> Try.withResources(conn::getInputStream,
stream -> new javafx.scene.image.Image(stream, w, h, true, true),
IOException.class))
.onFail((e) -> GUICommon.debugMessage("loadImageFromURL >> Cannot get image from : " + url.toString()))
.get()
.orElse(null);
}
2018/12/01(土) 03:52:43.89ID:dszPmHpM0
clone()メソッドについて質問です。
https://pastebin.com/iabGmAun
上記のBookクラスにおいて、フィールドに、Date型のpublishDateがあるのですが、
これをclone()でコピーするにあたっては深いコピーにする必要があるみたいなのですが、
String型は浅いコピーでよくてDate型は深いコピーにしないといけない理由は
何故でしょうか?
749デフォルトの名無しさん (ワッチョイ dfb6-k2CF [220.208.88.117])
垢版 |
2018/12/01(土) 11:04:34.18ID:5cBxQ4wD0
>>748
Date型は状態を変えられるから

たとえば単純にコピーするだけだと
こうなる

Book ┬ Date ─ 2018/12/01
Book ┘

Date.setTimeで状態を変えることができて
コピー先のBookの日付を変えると
コピー元のBookの日付も変わる

Bookごとに日付が異なるなら
BookをコピーするときにDateをコピーしないといけない

Stringは状態を変えられないから
同じものを参照しても問題ない
2018/12/01(土) 12:12:49.53ID:dszPmHpM0
>>749
丁寧にありがとうございました。
2018/12/02(日) 19:47:16.98ID:6vF3BQAf0
何でもいいから例外をなげたいんですけど
例外で調べても catch のサンプルばかりで投げ方がわかりません
752デフォルトの名無しさん (ワッチョイ dfb6-gj8/ [220.208.88.117])
垢版 |
2018/12/02(日) 19:48:34.29ID:4+IlSjWZ0
>>751
throw new Exception("テスト");
これでおk
2018/12/02(日) 20:02:05.39ID:6vF3BQAf0
>>752
new でふつうにclassみたいに作れるんですね
ありがとうございました
754デフォルトの名無しさん (ワッチョイ cf9d-hzet [118.110.23.55])
垢版 |
2018/12/02(日) 21:44:32.63ID:324yNEli0
基礎からのサーブレット Servlet/jsp 2009
この本で勉強するのは古すぎか?
2018/12/03(月) 07:20:06.09ID:ygSmLhmHa
>>753
みたいにっていうか、クラスだから。
Exceptionを継承して独自の例外クラスも作れる。
2018/12/03(月) 07:21:19.23ID:ygSmLhmHa
>>754
古すぎる。古文書レベル。
役に立たないどころか現代ではやってはいけないとされてるやり方が載ってる可能性もあるから、それを覚えてしまってむしろマイナスになるまであり得る。
2018/12/03(月) 08:28:43.59ID:sGONNGUuM
エスアイアーではまだ十分役に立つよ
2018/12/03(月) 18:42:47.05ID:C4qy2S1/0
列挙型のフィールドを持つクラスを作ったのですが……
同じ列挙型を2つ持たせる場合があるものの、1つのみ持つ場合もあることで問題が発生しています
コンストラクタ引数で列挙型指定する際に、必ず1つ指定するが、2つ目は(言うなら)nullでも構わない
列挙型の中にnull相当のものを追加してもよいと思ったのですが、それが1つ目に指定されてしまうと困るので追加したくない……という状態です

具体的には、いくつかの属性を列挙型で指定し、サブ属性は(同じ内容+(サブ属性なし))というかたちにしたいのです
サブ属性用に(同じ内容+なし)の列挙型を追加するしかないでしょうか……
759デフォルトの名無しさん (ワッチョイ dfb6-gj8/ [220.208.88.117])
垢版 |
2018/12/03(月) 19:43:01.66ID:SSwMcRlR0
>>758
引数チェックして例外投げればいんじゃない?
https://paiza.io/projects/smPMtDarEAoBp1uNWPYm8w?language=java
2018/12/03(月) 20:03:14.72ID:YDqptBck0
>>754
つか、古すぎてその本に書いてあるバージョンの開発環境を用意する時点で挫折すると思う。
2018/12/03(月) 20:22:15.78ID:C4qy2S1/0
>>759
そうか、1つ目にnull入れられないようにチェック入れりゃよかったんですね
エラーを使う発想がなかった
762デフォルトの名無しさん (アウアウウー Saa3-2q9Y [106.132.139.33])
垢版 |
2018/12/03(月) 20:50:22.63ID:6IhUZ/y0a
>>758
どういう状況なのかよくわからない。
同じメソッド名で一つの引数のやつと二つの引数のやつ作れば良いだけってことない?
つまりメソッドのオーバーロード。
2018/12/03(月) 21:24:42.76ID:C4qy2S1/0
>>762
それだと後々面倒だという理由があったような気がするんだけどむしろ後々表示するときに処理考えたほうが簡単に済みそうな気もしてきました……
こういう設計?ってどういう順番でやってくもんなんでしょうか
2018/12/03(月) 21:29:04.09ID:C4qy2S1/0
データを呼び出して表示する目的だったので、とりあえずtoStringのオーバーライドができてからデータ登録用のコンストラクタを調整していくことにしました
2018/12/05(水) 07:39:08.42ID:aQtlFGVia
拡張for文って配列でもコレクションでも動作しますよね?
ということは、双方に共通するクラスなりインターフェースなりがあるのでしょうか?
配列またはコレクションを引数に取る関数を作りたくて、内部処理は同じなので、オーバーロードではなく一つの関数で済ませたいのですが
2018/12/05(水) 08:50:55.63ID:uTDw63xLM
>>765
共通のインターフェースは存在しないです
コンパイラがIterableか配列か判断して処理します

オーバーロードを使いましょう
2018/12/05(水) 12:36:33.07ID:1UnNMx3Qa
>>766
ありがとうございます

それともう一つ質問させてください
リストを引数に取ってリストを返す関数で、よく
public <T> List<T> hoge(List<T> list){
// 何らかの処理
}
のように書きますが、この引数のリストがArrayListならArrayListを、LinkedListならLinkedListを、といったように、引数と同じ型のインスタンスを返したいです
ポリモーフィズムというよりは型クラスのイメージです

境界化して
public <A extends List<T>, T> A<T> piyo(A<T> list){}
のように書いてみましたが、「型Aは総称ではありません」とエラーになりました。

ワイルドカードなどを使えばいいのでしょうか?
というかあまりJava的な書き方ではないですかね?
2018/12/05(水) 13:09:26.62ID:uTDw63xLM
>>767
引数の型と戻り値の型をAにすればいんじゃないでしょうか

私はそういうの必要になったことがないです
List返すぜヒャッハーなコードしか書いたことないです

Javaでそういうの書きまくってる世紀末ジェネリック伝説
みたいな人もいると思いますけど
2018/12/05(水) 15:53:00.93ID:1UnNMx3Qa
>>768
何度もありがとうございます
混乱させるのも嫌なので普通の書き方に準拠します
Javaは慣れてないので勉強します
770デフォルトの名無しさん (アウアウカー Sacf-zlOQ [182.251.134.89])
垢版 |
2018/12/05(水) 16:52:13.39ID:ifntcr/4a
>>767
LinkedListってArrayListやListと用途が違う気が。。。
素直に?オーバーロードで良いんじゃ無いか?
多態性はジェネリックだけにあらずよ?
(と言うか、Java初期にはジェネリック無かったし)
2018/12/05(水) 18:38:20.62ID:1UnNMx3Qa
>>770
Listの汎用関数とか、Mapの汎用関数を作ってたら思った次第です
Mapなら、HashMapはHashMap、EnumMapはEnumMapで返したいなとかです
素直にオーバーロードしますね
ありがとうございました
772デフォルトの名無しさん (アウアウウー Saa3-2q9Y [106.132.134.92])
垢版 |
2018/12/05(水) 20:40:25.38ID:tLhebNm/a
それって呼び出す側にnewさせて引数で受け取れば良いだけでは?
自分でnewしてリターン値にしないなら関係なくなるよね。
773デフォルトの名無しさん (ワッチョイ 8f26-n9Ol [180.221.240.118])
垢版 |
2018/12/06(木) 10:12:58.64ID:Wmyc4Uu/0
素朴な疑問なのですが
Javaプログラマーってみんなオブジェクト指向やデザインパターンやイベントリスナーのしくみなんかを完璧に理解して使いこなせているんですか?
別に自慢じゃないけどオレは理系で高学歴ですが
こんな難解複雑なものをみんなたやすく理解できるものじゃないと思うのですが。
高校の数学物理化学をレベルの高い大学に受かるくらいの頭がないと無理と感じます。
2018/12/06(木) 11:07:38.61ID:nonVVsji0
デザインパターンは、オブジェクト同士の疎結合の歴史。
DI, Flux, Pub-Sub(発行・購読)とか

WEB+DB 106号に載ってる。
スマホアプリの設計。DI, MVVM, Flux
2018/12/06(木) 12:20:30.95ID:UmHyXr4oa
>>772
出来るだけ副作用のない関数にしたかったので、その手は見送りました
776デフォルトの名無しさん (アウアウウー Sadb-MnXc [106.132.124.116])
垢版 |
2018/12/06(木) 12:31:53.41ID:nzH90qpKa
>>773
容易くかどうかはわからんが、ずっとやってりゃ小学生でもわかるようになると思うけどな。
このスレにもいないか?小学生の頃からプログラミングたできたやつ。
777デフォルトの名無しさん (ワッチョイ 8f26-n9Ol [180.221.240.118])
垢版 |
2018/12/06(木) 17:43:06.98ID:Wmyc4Uu/0
>>774
>>776
なるほど。
まあワタシは頭がいいのですぐ理解して使いこなせそうですが。
ハッハッハ!

ところでスキルを身に着けたときやっぱり報酬は期待したいのですが
年収1000万以上、できるだけ高く、を目指すためには、どのようなことをすればいいですか?
これはヒューマンスキルも大きくかかってくると思いますが、具体的にどんなことをすれば高収入になりますか?
野球でも年俸はFAがからむと高収入になるし、それがないと成績がいいのに低収入の選手もいるし、
なにかコツを知ってるだけで同じスキルなのに収入は天と地ほどの大差になるというのが現状のような気がして。
2018/12/06(木) 17:50:43.36ID:siOfDNuRd
そういう事を聞かなくても行動できるのが、高収入な人だと思うけど。
2018/12/06(木) 17:55:06.03ID:jTeUvFfL0
グーの音もでねえw
780デフォルトの名無しさん (アウアウウー Sadb-MnXc [106.132.124.116])
垢版 |
2018/12/06(木) 18:08:44.44ID:nzH90qpKa
グー
2018/12/06(木) 19:12:26.31ID:Cn1g7mwL0
>>773
ちゃんと理解出来ている人は極少数だと思う
でも理解出来てなくてもある程度実装は出来てしまうしプログラマにも成れてしまうからどヤバいコードが生成されてしまったりするわけで
782デフォルトの名無しさん (ワッチョイ 8f26-n9Ol [180.221.240.118])
垢版 |
2018/12/06(木) 19:33:36.24ID:Wmyc4Uu/0
>>781
なるほどそうなのですね。納得。
オレはわりと進学校出身だけど、まわりはみんな数学物理化学で苦労しててオレだけできたから
プログラマの仕事でもそう簡単にオブジェクト指向/デザインパターン/イベントリスナーを理解できる人はいない気はしていました。

でもこれに甘えずオレはどんどん勉強してスキルアップしていきたいと思います。
オレは経験がないだけど伸びしろは無限にあると思っているので。

オレみたいな人がやっぱりプログラミングに向いてるよね?w
高校レベルの数学物理化学で苦労するようじゃプログラミングも高度なことは絶対できなそうだし。
2018/12/06(木) 19:37:14.79ID:vPx9vAPGa
>>782
傲慢であることはいわゆるプログラマーの三大美徳の1つなので安心して励んでください
784デフォルトの名無しさん (アウアウウー Sadb-MnXc [106.132.124.116])
垢版 |
2018/12/06(木) 19:44:56.31ID:nzH90qpKa
いや、使われる能力がちょっと違うと思うぞ。
数学や物理が絡まなくはないし絡められるわけだが、かといってそんなもんほとんど知らないままプログラミングできるようになるやつは居るだろうしな。
2018/12/06(木) 20:46:52.33ID:Cn1g7mwL0
>>782
数物化が出来る→プログラミングが出来る
は一般に成り立たないかな
情報系でそれなりに良い成績を獲ってるけど実技系の科目の成績は低いみたいな人は結構いたりするし情報系であってもちゃんと理解出来てる人はそんなに多くない
まぁ相関が全く無いとは思わないけどね
2018/12/07(金) 07:06:25.60ID:OaIqSJqTa
>>785
そこらへんは知識そのものというより、求められる思考方法が近しいってのはある。
だから数学が出来ればプログラミングが出来るっていうより、数学の得意なタイプのやつはプログラミングも得意であることが多い、とかそういう感じだと思う
2018/12/11(火) 03:28:29.21ID:BPBNTIF+0
Windows10のJava1.8以上のバージョンのSwingでの日本語入力する時、
編集中の行が画面の一番下の方の時に変換すると、日本語変換候補Windowが編集中の行と重なって、編集中の文字列を隠してしまうバグのようなものが
自分の環境ではおきるのですが、他の人はどうですか?

Swingのテキストコンポーネントでおきます。
788デフォルトの名無しさん (ワッチョイ 4eb6-u1j+ [111.90.13.55])
垢版 |
2018/12/11(火) 06:12:00.67ID:ms9OZaRY0
V2Cでもそうなる
2018/12/11(火) 13:05:28.74ID:BPBNTIF+0
>>788
ありがとう。
これだけ普通の条件で簡単に起きるのに、ずっとバグが直らないのはSwingで日本語入力なんてほとんど使われてないからなんだろうな。
Intellijとか使われてるけど、プログラム用のエディタだから日本語はほとんど入力されないのかな。


バグレポートかなんかしたいと思ったけど、ます英語を勉強しなきゃいけないし。
2018/12/11(火) 13:10:54.23ID:BPBNTIF+0
編集中の行の下に候補ウィンドウを表示する時はうまくいくんだけど、
編集中の上に候補ウィンドウを表示する時(つまり編集中の行が画面の下の方の時)、重なってしまう。
IMEのAPIのバグらしく、Swing使ってる限り独自のテキストコンポーネントを作っても直らない。
2018/12/14(金) 00:47:28.49ID:+doa0nVt0
3つ組の値を返したいときってそれ用のクラス作った方がいいの?
それとも汎用的なタプル的なの作ってそっちに詰め込んだ方がいい?
クラスにしたとして、他の箇所で使うかは微妙なところ
もしかしたらもう一回くらい使うかもってくらい
792デフォルトの名無しさん (アウアウウー Sacd-mTCp [106.132.132.34])
垢版 |
2018/12/14(金) 09:55:52.99ID:cCP3RgWTa
>>791
配列やリスト等に突っ込んで返す方法もあるが、本当にそれで問題ないかはよく考えた方が良いと思う。
2018/12/14(金) 17:58:19.96ID:mN1ioE7i0
>>791
Hashmapに突っ込むとかもある。
俺なら絶対にクラスを作るけど。
2018/12/14(金) 18:57:38.32ID:yKLaTwQg0
Ruby なら、メソッドの委譲機能を定義する、forwardable, delegate

継承(is-a)じゃなくて、汎用的なコンテナ(配列・リスト・辞書)に処理を委譲するような形(has-a)

クラス内に、汎用的なコンテナを作って、
push, pop など、同じメソッド名で、処理を内部コンテナに丸投げする
795デフォルトの名無しさん (ワッチョイ 8526-q1e7 [180.221.240.118])
垢版 |
2018/12/20(木) 10:29:23.88ID:uzBoRH9c0
VBAは経験豊富だけどJavaは初めてです。
もちろんいっぱい勉強しました。
転職アピールで取ったほうがいい資格はなにがありますでしょうか?
Java経験ないので面接の質疑応答と資格アピールでがんばろうと思うのですが。

資格受験はすぐに取り掛かる予定です。今月にでも!
2018/12/20(木) 11:33:53.15ID:hE8cxs9Xa
earとかwarがいまいちわからないです
開発時にファイルAでファイルB(別パッケージ)をimportして使っていて、eclipse上ではコンパイルも通っていました
でもデプロイ段階になってから、先輩にこの2つのパッケージは別々のwar?になるからimportできないよと言われました

自分の感覚だとそもそもそれでコンパイルが通るようになってるのがおかしい気がするのですが、Javaの世界だとそれが普通なんですか?
797デフォルトの名無しさん (ワッチョイ 8526-q1e7 [180.221.240.118])
垢版 |
2018/12/20(木) 12:23:41.18ID:uzBoRH9c0
earは耳、warは戦争です。
発音の注意としては、warは「ウォー」であって「ウァー」ではありません。
ここを押さえておけば大丈夫。
798デフォルトの名無しさん (ワッチョイ de9f-12mQ [175.134.57.7])
垢版 |
2018/12/20(木) 22:34:23.24ID:6pIAvd2J0
うぁー
799デフォルトの名無しさん (ワッチョイ d99b-1vVt [122.135.201.206])
垢版 |
2018/12/20(木) 22:40:41.67ID:9plr5EIz0
>>796
それはear、war云々の話ではなく
開発段階とデプロイ段階で違うことをやってるのがおかしいという話では?
2018/12/20(木) 22:44:39.27ID:JiVjjaVo0
>>799
あ、それです
ただJava界隈だとそれが普通なのかなと思いまして
2018/12/20(木) 23:04:28.20ID:IcrQnoua0
ear, war, tar など、ar とついているものは、zip などの圧縮 archive だろ。
サーバーにデプロイするために、1つにまとめる

だから、a.ear の中から、b.war の中の、オブジェクト・関数などは使えないのだろう

2つもデプロイしないから。
デプロイするのは、1つだけ

「java ear war」で検索!
2018/12/20(木) 23:44:55.08ID:uRkd43kpd
>>801
tarは非圧縮では?
2018/12/22(土) 02:51:17.48ID:Mf8aObFB0
本来アーカイブと圧縮は別だからな
804デフォルトの名無しさん (アウアウウー Sa01-0FqV [106.132.121.185])
垢版 |
2018/12/23(日) 17:21:45.07ID:yY9Kiav4a
tarは頭からファイル名、内容の順で入ってるだけだからいまいち使い辛いな。
ファイル名出したいだけでも途中に大きいファイルがあると待たされる。
テープ装置用のコマンドを無理矢理使い回してるのがいかんよな。
せめてファイル名だけ並べたヘッダだけでも別に用意すればいいのに。
2018/12/23(日) 19:04:58.22ID:TNYL2NhX0
>>804
テープ用のコマンドを無理矢理使いまわしてるんじゃなくて、今でもテープに書いたりもするぞ。-Mでマルチボリュームにして、-Lでサイズ指定したらテープ交換メッセージ出る。
そうしとかないとボリュームまたぎのファイル探しづらいし、そういうもんじゃねえかなぁ。
ディスクに落とすとしても、ボリューム切り替わるたびに最初のディスク入れさせるとか狂気の沙汰な気がする。
806デフォルトの名無しさん (アウアウウー Sa01-q1e7 [106.132.136.163])
垢版 |
2018/12/25(火) 17:56:14.99ID:Waofyifpa
まあ今でもテープ装置があれば使うのはわかる。
しかしテープではなく普通のファイルに書くならもう一ひねり欲しいところ。
2019/01/01(火) 16:14:58.54ID:rBFfBn4R0
silver黒本で勉強してて、例外終わらせたと思ったら最終章でラムダ式とかいう完全に新しいやつでてきてわろた
仕様が覚えられん
2019/01/01(火) 16:40:11.15ID:uncIR6SLM
ラムダなんか平均的なJava土方現場ならもれなく使用禁止だから安心していい
その証拠にこのスレでも滅多に出てこないだろ?
2019/01/01(火) 16:44:18.00ID:qkJ7OcChd
そうなのか、まあ試験用で一通り覚えないといけないけど
考え方とか他の言語やるときに役立つかな
2019/01/01(火) 17:32:31.57ID:+TypiBw50
Javaのラムダはコンビネータを記述できますか?出来ないのなら不要(ラムダの意味がない)と思います
2019/01/01(火) 18:42:27.39ID:d0qESFYs0
ラムダっていうか関数型の概念をJavaを通じて学ぶのは無謀だから試験用に割り切るしかない
812デフォルトの名無しさん (ワッチョイ bb01-y/tf [111.90.26.36])
垢版 |
2019/01/01(火) 22:01:03.29ID:dc6+vvYb0
>>810
は?

import java.util.function.Supplier;

public class Test {
 public static void main(String[] args) {
  バニーガール a = new バニーガール(() -> "巨乳");
  a.ぱふぱふ();
 }
}

class バニーガール {
 Supplier<String> create;

 バニーガール(Supplier<String> create) {
  this.create = create;
 }

 void ぱふぱふ() {
  String おっぱい = create.get();
  System.out.printf("%sでぱふぱふ", おっぱい);
 }
}
813デフォルトの名無しさん (ワッチョイ bb01-y/tf [111.90.26.36])
垢版 |
2019/01/01(火) 22:01:24.13ID:dc6+vvYb0
これがFactoryパターン
2019/01/01(火) 22:22:19.85ID:+TypiBw50
>>812-813
は?
それのどこがコンビネータですか?
815デフォルトの名無しさん (ワッチョイ bb01-y/tf [111.90.26.36])
垢版 |
2019/01/01(火) 22:32:19.26ID:dc6+vvYb0
>>814
コンビネータとは関係なくラムダ式は便利だよ
コンビネータ仕事で使うことないやろ
それを言うとんねん
816デフォルトの名無しさん (ワッチョイ bb01-y/tf [111.90.26.36])
垢版 |
2019/01/01(火) 22:32:48.32ID:dc6+vvYb0
アホがなあにがコンビネータだバカが
2019/01/02(水) 03:25:42.83ID:U9fPlruq0
>>815
コンビネータを記述できるからλ式に存在意義があるのであって、コンビネータを記述できないλ式なんて「λ式」と名乗る資格がない文法的屑仕様にしか見えないのですけれども
818デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 13:27:44.18ID:iJhnqyOR0
>>817
コンビネータ記述できなかったの?

それはそれとしてJavaのラムダ式はコンビネータとは関係なく
匿名クラスを書かなくてすむから便利だと思うよ
Streamとかで使ったら便利だよ
819デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 13:29:49.59ID:iJhnqyOR0
導入した意図も知ろうとしないで
屑仕様と言う人にJavaを語る資格があるとは思えない
普段Java使ってるの?
820デフォルトの名無しさん (ワッチョイ bb02-AbSj [175.134.57.7])
垢版 |
2019/01/02(水) 14:33:45.83ID:MMKJrJD00
Kotlinもよろしく
2019/01/02(水) 16:35:18.40ID:U9fPlruq0
>>818-819
無名クラスとラムダ式の差異なんて知れており、やれといわれたらチャッチャッと「無名クラス->ラムダ式」「ラムダ式->無名クラス」の両方やれますね…
普段は C++ 使いですが、C++方面での認識は「ラムダ式は糖衣構文」

私の認識は「Java や C++ の「自称」ラムダ式は、所詮自称でしかなくコンビネータを記述できない」
「コンビネータを記述できないものをラムダ式と呼ぶことはできない」
2019/01/02(水) 16:47:38.66ID:ckX+EqcM0
いまどきHaskellerでも言わないような理論振りかざす原理主義者なんかNGしとけよ
823デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 17:02:15.83ID:iJhnqyOR0
>>821
やれるやれないじゃなくて
ラムダ式を使ったら簡単に書けるでしょう
だから便利でしょうという論理ですよ

Javaの公式ドキュメントでラムダ式と呼ばれてるので
ラムダ式と呼ぶべきかと

ところでJavaのラムダ式でコンビネータ記述できなかったの?
ググったらyコンビネータとかzコンビネータとかパーサコンビネータとかあったけど
それは自分の定義ではコンビネータと呼ぶことはできないとか?
824デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 17:05:38.37ID:iJhnqyOR0
>>822
コンビネータが必要になったことがないから
大事なんだと言われてもよくわからんのよね
コンビネータの概念を知らなくてもJavaのラムダ式は便利だと思うんよ
2019/01/02(水) 18:05:41.80ID:U9fPlruq0
>>823
>ググったらyコンビネータとかzコンビネータとかパーサコンビネータとかあったけど
それは javascprit じゃない?js なら書けると思いますよ、ちょっと url を教えてください。

>Javaの公式ドキュメントでラムダ式と呼ばれてるのでラムダ式と呼ぶべきかと

そういう権威・権力のスカートにしがみつく理由で採用するのですか?頭が悪いと思われますよ
プログラマってそういうものからはもっとも遠くに立っている人種ではなかったかと

>>824
>コンビネータが必要になったことがないから大事なんだと言われてもよくわからんのよね

それは当然です、コンビネータは「記述できる範囲を定める」ものであり実用プログラムで使用することはありません
「コンビネータを記述できること」をもって lambda 式と呼ぶべき、という意見です、コンビネータが記述できないのなら別の名前にするべきでしょう。
私は@便利に書けるからといって糖衣構文をなんでもかんでも言語仕様に含めることには反対であり、ましてや、Aなんでもかんでもぶちこんだ糖衣構文にテキトーな名前をつけることにも反対しているのです

Java は発表当初から言葉遣いがおかしいところがあり、たとえば「参照(reference)」などは他言語とは完全に意味が違いますね
826デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 18:27:16.02ID:iJhnqyOR0
>>825
https://www.google.com/search?q=java+%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF

Javaのラムダ式と君のラムダ式があって
Javaのラムダ式は僕のラムダ式じゃないんだと
君は言うけれども君は自分が頭が良いと思われてると
思ってるのかな

俺はJavaのラムダ式は簡単な処理を簡単にかけるから大賛成
Streamを使いやすいしリッチなコレクションに処理を丸投げする
関数型のようなプログラミングがやりやすくなって大感謝

君の価値観とは正反対だけどJavaのラムダ式は便利だよ

コンビネータが実用プログラムで使用されることがないなら
ラムダ式をコンビネータを記述できるかどうかで語ることに意味あるのかな
Javaのラムダ式は実用上有用だから導入されたものだよ

referenceの話は具体的にどの言語の概念と完全に違うと言ってるのかしら
文脈が変われば概念が変わるのは当然と思うよ

スペリングが同じだからといって概念が同じとは限らない
言語が変わるならなおさら
2019/01/02(水) 19:48:36.75ID:U9fPlruq0
>>826
まず「パーサコンビネータ」の「コンビネータ」は不動点コンビネータとはなんの関係もありません
大雑把にググッた結果だけみせて、その中身を精査していないのは、新しい概念に対するキャパシティー、あるいは概念把握力に問題があるのではないですか?

Java では yコンビネータは無理でも、zコンビネータという不動点コンビネータは記述できるようですね…これは追体験しているところです、情報を提供いただきありがとうございます。

>君の価値観とは正反対だけどJavaのラムダ式は便利だよ
私の価値観は「Javaラムダ式は不便である」ではなく「Javaラムダ式はラムダ式と呼べるのか?」でしたが、Java ラムダ式にて不動点コンビネータの一部が記述できるようですから、この認識はあらためることになりました

>ラムダ式をコンビネータを記述できるかどうかで語ることに意味あるのかな
>Javaのラムダ式は実用上有用だから導入されたものだよ
有用、というよりも単なる糖衣構文にしかみえないですね、まあ、このあたりは人それぞれ

>referenceの話は具体的にどの言語の概念と完全に違うと言ってるのかしら
>文脈が変われば概念が変わるのは当然と思うよ
>スペリングが同じだからといって概念が同じとは限らない
>言語が変わるならなおさら

いろいろな言語をやってみよう、というときには、あなたのこの助言は有用だと思います
しかし、それと同程度に次の意見も有効ではないですか?

「異なる言語であっても、同じ概念に対しては同じ言葉を使い、違う概念に対しては違う言葉を使うべき」

C++ の reference と Java の reference は、それぞれの概念が近接することもあり、非常に紛らわしいです
これは Java が出たときにすぐに問題になっていた記憶があります。
2019/01/02(水) 20:00:23.62ID:wUoDMH3da
なんでみんな荒らしコテハンにいちいち構ってんの
三が日の暇つぶしか
2019/01/02(水) 20:02:31.83ID:U9fPlruq0
>>828
私のどこが荒らしと感じたのですか?具体的に記述できるのですか?
830デフォルトの名無しさん (ワッチョイ 0d2e-y/tf [118.86.128.243])
垢版 |
2019/01/02(水) 20:14:19.54ID:iJhnqyOR0
>>827
パーサコンビネータと君のコンビネータについては
どっちでも良いと思って

誤解されたくなければ君は詳細に説明してるだろうし
俺が違ったものだしても君は文句言える立場じゃないよ

yコンビネータのことなんだと君が最初から言ってたなら別だけどね
yコンビネータと最初に言ったのは俺だよ

俺のエスパー能力に君は感謝こそすれ文句言うのは大間違いだよ
いま俺が君から聞きたいのは謝罪の言葉だよ
きちんと説明せずに文句まで言ってしまってどうもすみませんでしたという
言葉を聞きたいよ

C++ の reference と Java の referenceは近接してるんだと言ってるわけですね
完全に違うと言ってたと思うんだけどそれもC++ の referenceのこと?

Javaが出たときにはJavaは普及してないだろうから新しい概念も周知されてないでしょう
それはしょうがないと思うけどC++のreferenceとJavaのreferenceはどう違うの?

言語間にまたがって用語を統一しようとしたら言語の外に辞書を作らないといけないね
プログラミング言語の用語一覧を作って概念が少しでも異なる場合は新しい用語を
追加することというルールを作らないといけないね

俺は嫌だなあそういうの官僚的でめんどくさいだけ賛同できないわ
2019/01/02(水) 20:26:05.19ID:wUoDMH3da
>>829
「Javaのラムダ式でコンビネータ書けますか?書けなかったら不要ですよね?」

「コンビネータ関係なくラムダ式便利だよ」
ここまでは(入門・初心者向けかはともかく)質問スレの範疇

「コンビネータが書けなきゃラムダ式と呼んではいけない!それに従うのは権威主義で〜」
ここら辺から質問関係なくなってる
単語の選出基準の話ならJavaの開発チームにでも聞かないとここで解決できるはずもない
同一スペリングで意味が異なる単語の話まで抽象化するともっともっとJava関係ない
そしておそらく本人もそんなことわかってるのに言い続けてるあたりが荒らし
2019/01/02(水) 20:36:27.11ID:U9fPlruq0
>>830
一連のやりとりは Java のスレで、Java とは異なる世界からやってきた「ラムダ式」「不動点コンビネータ」をぶつけてみて(化学)反応を楽しむ、という私の悪癖が出てしまいました、あまり気にしないでください
ごめんなさい

そして z コンビネータの存在を知らしていただいたことに感謝します
2019/01/02(水) 20:38:21.42ID:U9fPlruq0
>>831
>おそらく本人もそんなことわかってるのに言い続けてるあたりが荒らし

…お見通しですね
そのとおり、そういう意味なら私は荒らし、です…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況