X



Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0233デフォルトの名無しさん
垢版 |
2017/08/01(火) 22:57:16.20ID:zlxlSjkN
>>231
コレクションライブラリにメソッド用意することはできるわけで
ラムダ式は処理を丸投げできるハイパーリッチなコレクションと
組み合わせてこそ進化を発揮する

今のJavaの標準ライブラリがショボいことは事実だ

逆に言うとJavaはもっと成長する余地があるってこと
いくらきれいな白鳥でも・・・あとはわかるだろ、そういうことだ
0235デフォルトの名無しさん
垢版 |
2017/08/02(水) 15:22:29.01ID:mxNq7Aj6
8がつ2にち(すいようび)
きょうは、すっきりわかるじゃば入もんを
330ページまでよみました。

ゆうしゃとおばけきのこをうみだしました。
とてもおもしろかったです。
0236デフォルトの名無しさん
垢版 |
2017/08/02(水) 18:18:04.54ID:xzl419Dl
>>232さんに触発されて書いた
OCamlならこんだけ
https://ideone.com/JhDj2U

「連続した同じ要素をまとめ」るコード
ただし、rubyのものにくらべ簡易的なchunk
しかもchunk関数はパクり
ぐぐって丁度いいの見っけたから拝借した

だから何やねん!って言うのは我慢してほしい(´・ω・`)
0237デフォルトの名無しさん
垢版 |
2017/08/02(水) 19:08:45.26ID:JD5jVN3c
そういうフィルタが既にあるかどうかよりも簡単に拡張して実装できるかの方が言語的には重要だろう
C#のLinqはyield returnと拡張メソッドのおかげでLinq拡張がすごくやりやすい
それに比べるとJavaのStreamは……
0242デフォルトの名無しさん
垢版 |
2017/08/04(金) 19:10:37.95ID:US5e0j3V
> 簡単に拡張して実装できるかの方が言語的には重要

https://ideone.com/Fegs0C
rubyも拡張しやすいほうなのかな?
よく分からないまま書いたので、なにかおかしいかもしれない
最初のほうでself.dupなんていきなりしてよかったのかは不明
(Enumeratorを返すメソッド作成の作法的に)

なんだかんだ申しましたが
StreamAPIがどうなっていくかは
今後静かに見守って行きたいと思います 完
0243デフォルトの名無しさん
垢版 |
2017/08/04(金) 20:57:07.88ID:4RPAmR0Z
          完




 
0244デフォルトの名無しさん
垢版 |
2017/08/05(土) 20:13:27.69ID:CKfofrut
きょうはとしょかんで
スッキリのメソッドをべんきょうしました。

メソッドはとてもむずかしかったです。
となりにこうこう2ねんせいが
べんきょうしていました。
あしたもとしょかんにいきたいです。
0247デフォルトの名無しさん
垢版 |
2017/08/08(火) 12:19:00.25ID:ybbt0LUq
初歩的な質問すみません

おじいちゃんクラス
親クラス
子クラス

という継承関係があってメンバーの名前が統一されてる時
子クラスから親のメンバーを利用するにはsuperを使うのは分かりましたが
おじいちゃんのメンバーを利用するにはどうしたら良いんですか?
0250デフォルトの名無しさん
垢版 |
2017/08/08(火) 13:04:24.09ID:It7rbX8+
予約語かどうかの問題ではなく単にそう作ってあるかどうかの問題では?
だってそういう言語作ろうと思えば作れるでしょ。
0252デフォルトの名無しさん
垢版 |
2017/08/08(火) 13:32:02.75ID:It7rbX8+
はいはい。

そういやキャストすればできるな。
0253デフォルトの名無しさん
垢版 |
2017/08/08(火) 13:37:26.20ID:It7rbX8+
こんなの。
ただしクラス名わかってないとできない。

class A {
int a = 1;
}
class B extends A {
int a = 2;
}
class C extends B {
int a = 3;
int get() {
return ((A) this).a;
}
}
0254デフォルトの名無しさん
垢版 |
2017/08/08(火) 13:45:04.54ID:EzmBL1dy
コードも酷すぎるからお前はもう二度と書き込まん方がいい
初心者が初心者を低レベルに導く流れはやめろ
0257デフォルトの名無しさん
垢版 |
2017/08/08(火) 15:45:07.99ID:lxfir1A5
何かあったのだろう
0258デフォルトの名無しさん
垢版 |
2017/08/08(火) 16:05:06.76ID:nQaUo2VV
全くプログラミング経験無しで
なんとなくjava始めたけど
そもそも論としてこの選択は正しかったのだろうか
0259デフォルトの名無しさん
垢版 |
2017/08/08(火) 18:14:28.51ID:tkRtIBMh
さあなあ。今後何やるかにもよるんじゃないか?
0260デフォルトの名無しさん
垢版 |
2017/08/08(火) 19:59:14.74ID:p/Km8czM
今、学生で、普通のサラリーマンになる予定なら、
エクセルやアクセスのマクロ(vba)が書ける方が職場で重宝されそうだけどね

将来androidアプリを作りたいなら、「とりあえずjava」であってると思うけど
0261デフォルトの名無しさん
垢版 |
2017/08/08(火) 21:13:19.41ID:qcoC0xc5
>>258
いいんじゃないの
LLとか便利だけど、その面倒な部分の大事さとか学べない

ひとつの言語だけで終わるなら用途によってもっといい言語がありそう
0262デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:06:18.12ID:GW2MTj/k
>>247ですが、>>253さんのコード目からウロコです!
thisもキャストできるんですね
不勉強なので>>255さんの仰る事が少し難しいのですが、インスタンスだから、ということでしょうか
今丁度その辺りを勉強しているところなので正しく理解できるよう頑張ります
皆さんありがとうございました
0263デフォルトの名無しさん
垢版 |
2017/08/09(水) 08:33:32.83ID:IlLjAgAU
ありがとう。
どうやらjavaを選択したことは間違いではなかった様子。
まだfor構文だが頑張る
0264デフォルトの名無しさん
垢版 |
2017/08/09(水) 23:08:12.69ID:LMnBr9ad
forいいじゃん
個人的に、Javaで書くときはなるべく質素に書くのが似合ってる気がする
拡張forとかfroEachとかStreamAPIとか言わずに
for (int i = 0; i < a.length; i++)の形が美しいとすら思う
単に個人的な意見です
0265デフォルトの名無しさん
垢版 |
2017/08/09(水) 23:59:14.48ID:eM0BjlR2
美しいかどうかは個人の感覚だけど
短く楽に書けて、読みやすいのはメソッドチェインの方かな
0267デフォルトの名無しさん
垢版 |
2017/08/10(木) 06:49:53.58ID:7fXn0jIL
個人的な意見をごり押ししていいなら無駄なカウンタ変数は美しくない
変数が再代入されるのもできる限り避けたい
よってforはあまり使わない
0271デフォルトの名無しさん
垢版 |
2017/08/10(木) 19:26:16.34ID:9td2XcHM
処理速度はともかく数字への無駄な依存をなくすことが悪いことのはずない
チューニングはボトルネックと判明してからでも遅くはない
0272デフォルトの名無しさん
垢版 |
2017/08/10(木) 19:32:52.40ID:Jc4Vqs2x
ループ書くと後々必ずループの中身を肥大化させるバカが居からなるべくループは書かない
0274デフォルトの名無しさん
垢版 |
2017/08/10(木) 23:18:34.33ID:7fXn0jIL
終わらないループ
終わらないif文
終わらないメソッド
使い回され続ける変数
共通部分の大量コピペ

業務プログラムあるあるですな
0276デフォルトの名無しさん
垢版 |
2017/08/11(金) 11:33:31.61ID:VT8Bdzbq
仕様を決めつけて最適化しすぎると保守性が下がるんだけどな。
0277デフォルトの名無しさん
垢版 |
2017/08/11(金) 12:10:31.38ID:BDXv2ULb
共通部分なんて程度で共通化すべきではない
それはたぶんたまたま同じなだけ

どうせすぐここだけ変えてほしいって要求が来てあっという間にIF文まみれになる
最初から別につくったほうがまし
0279デフォルトの名無しさん
垢版 |
2017/08/11(金) 17:20:44.31ID:4bbWTV9L
372仕様書無しさん2017/08/11(金) 10:31:43.41
フリーランスで検索すると引っかかる零細ITがやっているサイトはだめだ。
高額に見せているけど実際は50万前後
JIET加入した方がいいよ。案件は毎日千件以上末端価格は60万円 平凡な稼働時間の80万円の案件もある。
ユー子が求人をだしてる。名刺も渡せる。ユー子に名刺が渡せるんだぞ。夢のようだ

それらの案件まさぐってHPで転売していたのが零細ITがやるフリーランスサイト

自称エージェントはJIETから流れてくる案件を転売してるだけだった。
JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む

473非決定性名無しさん2017/08/03(木) 15:21:30.71

JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる
自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の
間でやらしている。
0281デフォルトの名無しさん
垢版 |
2017/08/11(金) 17:38:47.68ID:uuzmQ1J4
>>276
クライアントが拘りの部分だけ設計時に最適化したがるんだよな
そんなとこ運用してからでいいだろというとこ

全部設計してくれてコーディングだけでいいなら任せるけどさ
0282デフォルトの名無しさん
垢版 |
2017/08/11(金) 18:43:57.91ID:JLvLp2X8
>>280
たまたま同じ部分をIFでなく継承でまとめたからって、おこる問題は一緒だ
むしろ継承はIF文より汎用性がないからIF文よりずっと悲惨なことになる

すなおにコピペで別クラスにしとこう
0283デフォルトの名無しさん
垢版 |
2017/08/11(金) 20:13:57.80ID:uuzmQ1J4
>>282
初心者だと応用効かないか条件分岐の代わりにしか使えないとか

でもそもそもそういうこと言ってるんじゃないんだよ
ちゃんとオブジェクト指向わかってるば、たまたま共通のコードとかじゃなくて、設計段階で本質的に同じものでまとめて書ける
お前のはサブルーチンとして使ってるだけだろ
0286デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:26:09.39ID:JLvLp2X8
>>283
設計段階で同じものだってわかってるなら何使ったってどうにでもなるわ!
オブジェクト指向関係ない
そのあとで実はここ違いますってなったとき

IF文:分岐を入れる
オブジェクト:ケースに応じて継承もしくは別クラス作成
コピペ:該当部分を修正

コピペが最優秀なんだけど
0287デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:28:04.90ID:3EZq4DC0
その該当部分が鼠算で無限増殖していくのであっという間に手に負えなくなる
コピペは死罪
0288デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:34:53.83ID:JLvLp2X8
そんなに増えないって
結合テストのケースに応じてコピペすりゃいいんだ
どうせまとめたって機能別に試験させられるんだからそこがボトルネックのはず

むしろ同じテストが完了した時点で
同じものがたくさんできているので生産性が高いといえよう
0289デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:36:39.69ID:uBm+ojOM
同じ記述はメンテ的に良くないので避けるべき、と習ったよ
修正箇所を少なく作るのが江戸っ子らしい
ただそんな書き方は素人の俺には思いつかないのが問題
0290デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:43:55.23ID:JLvLp2X8
まとめたら単体まで作るときは楽なんよね…
まとまってるぶん網羅しやすいからブラックボックステストの試験ケース少なくて済む

でもIF文とか継承まみれになると可読性めっちゃさがる
0292デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:53:13.03ID:3EZq4DC0
if文が増えるなら
業務分析が下手くそ
設計が下手くそ
コーディングが下手くそ
0295デフォルトの名無しさん
垢版 |
2017/08/11(金) 22:13:39.81ID:+73EubJb
   彡 ⌒ ミ  彡 ⌒ ミ
  ( ´・ω・)  ( ´・ω・)
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄ カタカタ ̄ ̄

   彡 ⌒ ミ  彡 ⌒ ミ
  ( ´・ω・)  .(・ω・` )ヾ < なぁ、これって
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄

   彡 ⌒ ミ  彡 ⌒ ミ
  (  ´・ω)  .(・ω・` )
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄

  彡 ⌒ ミ   .彡 ⌒ ミ
  (´・ω・`)   (´・ω・`) また、かみの話してる
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄
0298デフォルトの名無しさん
垢版 |
2017/08/11(金) 22:53:51.24ID:GWHLh1ZD
このハ・・・
0299デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:22:48.62ID:uuzmQ1J4
>>286
仕様と1対1にできるのがオブジェクト指向のいいとこだろう
言ってることが真なら設計に戻るだけ
コードだけ変えてメンテできなくなるのは初心者が陥りがちな罠
0300デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:47:13.60ID:VT8Bdzbq
>>289
それむしろ逆。共通化してしまうと仕様変更で別々になる可能性がある。

共通化は本当に共通化したい部分にすべきことであって、何でもかんでも共通化は間違い。
0301デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:48:26.02ID:VT8Bdzbq
いまどきJavaでオブジェクト指向にこだわっているのは考え方が古い。
0303デフォルトの名無しさん
垢版 |
2017/08/12(土) 07:28:02.61ID:wZgNEoNa
ビット演算について教えて下さい。
ビット演算子(&,|, ^)の右側と左側で桁数が違うときは、どういう処理がされるのですか?
0304デフォルトの名無しさん
垢版 |
2017/08/12(土) 08:21:47.95ID:WyVA8Sgg
>>302
データベースとのやりとりは結局、解決してないけどな。
0305デフォルトの名無しさん
垢版 |
2017/08/12(土) 08:31:15.18ID:w+TtGEkw
>>303
例えば、8・16ビットで、ビット演算して、何ビットの結果が必要なんだ?

少ない方の結果が必要なら、多い方を、少ないビットに変換すればいいし、
多い方の結果が必要なら、少ない方を、多いビットに変換すればいい

多いビット・少ないビットの、変換関数を探すか、自分で作ればいい
0306デフォルトの名無しさん
垢版 |
2017/08/12(土) 09:08:08.52ID:wZgNEoNa
>>305
やりたいことは符号無しintをlongに型変換したいのです。
どこかのサイトを見たところ、
longNumber = unsignedInt & 0x00000000FFFFFFFF
とすればいいらしいのですが、

そもそも桁違いでビット演算したらどうなるんだ?というのが気になりまして。

小さい方を大きいほうの型にキャストしてるのか、
それともキャストしてるんじゃなくて桁を増やしてるのか…
桁増やすにしても、符号拡張してるのか、0で埋めてるだけなのか…

気になって夜も眠れますん。
0307デフォルトの名無しさん
垢版 |
2017/08/12(土) 10:00:34.76ID:WyVA8Sgg
>>306
目的に対してどうしてそういう手段でやっているのか?
0308デフォルトの名無しさん
垢版 |
2017/08/12(土) 13:30:45.00ID:VqNg7Zuq
>>306
Chapter 15. Expressions
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1
|
| 15.22.1。 整数ビット演算子&、^、|
| オペランドに対してバイナリ数値昇格が最初に実行されます。
|
| 5.6.2。バイナリ数値昇格
| いずれかのオペランドがdouble型であれば、他方はdouble型に変換されます。
| それ以外の場合、どちらかのオペランドがfloat型であれば、もう一方はfloat型に変換されます。
| それ以外の場合、どちらかのオペランドがlong型であれば、他方はlong型に変換されます。
| それ以外の場合、両方のオペランドがint型に変換されます。

ということなので今回の場合はlong型に変換されるはずよ

> longNumber = unsignedInt & 0x00000000FFFFFFFF

これは末尾にLをつけないとlongにならないかと

> int unsignedInt = -1;
> long longNumber = unsignedInt & 0xFFFFFFFFL;

上をコンパイルして逆コンパイルしたら下になった

> int unsignedInt = -1;
> long longNumber = (long)unsignedInt & 4294967295L;

なので型の変換はキャストっすね

Java 8ならInteger.toUnsignedLongというメソッドが用意されてるので
そっちが良いかも
0309デフォルトの名無しさん
垢版 |
2017/08/13(日) 01:18:20.66ID:SYaWjJhn
型違いって言うのが、典型的なバグの条件

MISRA-C などでは、バグを防ぐために、
元から、型が異なるものを演算してはいけないというルール

「A 演算子 B」と書く場合、A, B は絶対に同じ型である必要がある

だから、この式の前に、絶対に同じ型にしているから、
型変換のルールに、疑問など生じない

>>308
に書いているような型変換のルールを、探してきて見直すような、
暗黙の型変換というのは、すごく単純な場合を除き、使わない方がいい

机上デバッグで、毎回、型変換のルールを見直して、
あれこれ議論しないといけないから面倒

しかも、開発メンバーが変わるたびに、説明・確認しないといけない

基本的に、言語仕様書を引っ張りだして、確認するようなものはダメ。
言語仕様書が必要な、コーディングをしてはいけない。
言語仕様書を見ない人もいるし、バグるだけ
0310デフォルトの名無しさん
垢版 |
2017/08/13(日) 01:57:33.90ID:aXXBQeA8
PASCAL みたいなのがいいってことかな。
0311デフォルトの名無しさん
垢版 |
2017/08/13(日) 02:04:55.15ID:s7ggTJlx
C言語はJavaより型付けが弱いんじゃないかな
ブーリアンもないし
0313デフォルトの名無しさん
垢版 |
2017/08/13(日) 07:08:01.01ID:WltPyYK1
>>308
完璧な回答ありがとうございます。
私の知りたかったこと全てと、私の知らなかったことが入ってました。
L付けておきます。

残念なことに、java1.7なのです。androidなもので。
0314デフォルトの名無しさん
垢版 |
2017/08/13(日) 07:09:42.70ID:WltPyYK1
>>309
はーい。あざーっす。
オペランドの片側に(long)付けておきます。
0315デフォルトの名無しさん
垢版 |
2017/08/15(火) 16:59:30.70ID:RbnTXkE5
今日からjavaはじめる
よろしくおまいら
初心者レベルだけどC言語から入ってjavaはじめるんだけど文字列結合とかキャストとか省略が許されててむずむずするわ
0316デフォルトの名無しさん
垢版 |
2017/08/16(水) 09:09:46.76ID:qOG9houb
実装者が楽になる言語仕様がバージョンアップのなびに追加されるから
このせいで理解してない人が書いたクソコードが万延する諸刃の剣になってる
0317デフォルトの名無しさん
垢版 |
2017/08/16(水) 10:09:58.32ID:F4bo7YNW
>>316
本来の書き方をわかってて省略するのとそういうもんだと思って書くのとでは雲泥の差があるな
0322デフォルトの名無しさん
垢版 |
2017/08/16(水) 17:14:50.23ID:qxnt2v0K
>>320
いきなりメソッドの初めで戻り値を変数に設定して、メソッド内で上書かずに最後でreturn。
0323デフォルトの名無しさん
垢版 |
2017/08/16(水) 19:48:31.09ID:ey68s8sH
Java最大の失敗はBean
これのせいで日本企業の所有するコードはパブリックアクセサだらけの地獄になった
0324デフォルトの名無しさん
垢版 |
2017/08/17(木) 00:48:02.70ID:x9wW63w8
>>322
変更があった時に、その変数を弄べばいいだけになるから
割と良いと思うけど

逆の変更があったからあなたが見た状態になったのかも知れないし
0325デフォルトの名無しさん
垢版 |
2017/08/17(木) 06:28:14.94ID:8r7YxJOf
>>324
あなたの解釈だとコーディングミスを想定していない。
0326デフォルトの名無しさん
垢版 |
2017/08/17(木) 14:38:05.88ID:G+zZ9zG7
超初心者ですまん
メソッドを数値で分けて呼び出したいんだけど
今使ってるのがswitchでの分岐
int a;
switch(a){
case 1:
hoge();
break;
case 2:
hogee();
break;
}
みたいな

もっと効率の良いやり方があったら教えて欲しい
0327デフォルトの名無しさん
垢版 |
2017/08/17(木) 15:17:28.53ID:aODDrPp/
>>326
幾つぐらい分岐するのかな?少ない場合はそっちの方が速いような気がするが。

分岐が沢山あるとか増え続ける可能性があるとか使う側で自由にセットしたいとかいう場合はまずinterface作っておいてその中にメソッドの定義を書いておく。
次にそれをimplementしたクラスを必要なだけ作っておき、HashMapにキーと共にインスタンスを入れておく。
後はそのHashMapからキーを使ってget()してメソッド呼ぶだけ。
0328デフォルトの名無しさん
垢版 |
2017/08/17(木) 15:33:57.25ID:XeZ7degk
c言語の入門書が一通り終わってオブジェクト指向も触りたくなったんでお勧めの入門書教えて下さい
0329デフォルトの名無しさん
垢版 |
2017/08/17(木) 16:06:35.83ID:OlLybMzW
(´・ω・`)あのー
すべての文字列はStringクラスのインスタンスとしてあつかわれるっていう表現がうまくイメージできないの
じぶんなりにまとめたのは

String s = "こんにちは"
これは
String s = new String(こんにちは)
と同じでStringクラスをインスタンス化するときに、コンストラクタに対して引数としてこんにちはをわたしてる
そしてインスタンス化されたStringクラスのメンバ変数にこんにちはが代入された
同じようにすべての文字列は扱われるので、
すべての文字列はStringクラスのインスタンスとしてあつかわれると表現される

このイメージでいいの?
くわしいひとおしえてくれませんか?
0330デフォルトの名無しさん
垢版 |
2017/08/17(木) 16:09:03.31ID:8r7YxJOf
>>329
Stringはよく使うクラスだから、特別な表記があるだけ。
■ このスレッドは過去ログ倉庫に格納されています

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