Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>231
コレクションライブラリにメソッド用意することはできるわけで
ラムダ式は処理を丸投げできるハイパーリッチなコレクションと
組み合わせてこそ進化を発揮する
今のJavaの標準ライブラリがショボいことは事実だ
逆に言うとJavaはもっと成長する余地があるってこと
いくらきれいな白鳥でも・・・あとはわかるだろ、そういうことだ >>232
(´・ω・`) n
⌒`γ´⌒`ヽ( E)
( .人 .人 γ /
=(こ/こ/ `^´
)に/こ( 8がつ2にち(すいようび)
きょうは、すっきりわかるじゃば入もんを
330ページまでよみました。
ゆうしゃとおばけきのこをうみだしました。
とてもおもしろかったです。 >>232さんに触発されて書いた
OCamlならこんだけ
https://ideone.com/JhDj2U
「連続した同じ要素をまとめ」るコード
ただし、rubyのものにくらべ簡易的なchunk
しかもchunk関数はパクり
ぐぐって丁度いいの見っけたから拝借した
だから何やねん!って言うのは我慢してほしい(´・ω・`) そういうフィルタが既にあるかどうかよりも簡単に拡張して実装できるかの方が言語的には重要だろう
C#のLinqはyield returnと拡張メソッドのおかげでLinq拡張がすごくやりやすい
それに比べるとJavaのStreamは…… >>240
(´・ω・`) n
⌒`γ´⌒`ヽ( E)
( .人 .人 γ /
=(こ/こ/ `^´
)に/こ( > 簡単に拡張して実装できるかの方が言語的には重要
https://ideone.com/Fegs0C
rubyも拡張しやすいほうなのかな?
よく分からないまま書いたので、なにかおかしいかもしれない
最初のほうでself.dupなんていきなりしてよかったのかは不明
(Enumeratorを返すメソッド作成の作法的に)
なんだかんだ申しましたが
StreamAPIがどうなっていくかは
今後静かに見守って行きたいと思います 完 きょうはとしょかんで
スッキリのメソッドをべんきょうしました。
メソッドはとてもむずかしかったです。
となりにこうこう2ねんせいが
べんきょうしていました。
あしたもとしょかんにいきたいです。 >>244
となりに
→となりで
にほんごも、もっとがんばりましょう 初歩的な質問すみません
おじいちゃんクラス
親クラス
子クラス
という継承関係があってメンバーの名前が統一されてる時
子クラスから親のメンバーを利用するにはsuperを使うのは分かりましたが
おじいちゃんのメンバーを利用するにはどうしたら良いんですか? それはウルトラ、じゃなくて、super.super. って使えない? superはただの予約語なんだから使えるわけがない
馬鹿かおまえは 予約語かどうかの問題ではなく単にそう作ってあるかどうかの問題では?
だってそういう言語作ろうと思えば作れるでしょ。 そう作ってないから予約語なんだよ
馬鹿は回答側に回るな馬鹿 こんなの。
ただしクラス名わかってないとできない。
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;
}
} コードも酷すぎるからお前はもう二度と書き込まん方がいい
初心者が初心者を低レベルに導く流れはやめろ >>247
そっちを使う、とかじゃなくて
子クラスがそのように実装される、というだけ 全くプログラミング経験無しで
なんとなくjava始めたけど
そもそも論としてこの選択は正しかったのだろうか 今、学生で、普通のサラリーマンになる予定なら、
エクセルやアクセスのマクロ(vba)が書ける方が職場で重宝されそうだけどね
将来androidアプリを作りたいなら、「とりあえずjava」であってると思うけど >>258
いいんじゃないの
LLとか便利だけど、その面倒な部分の大事さとか学べない
ひとつの言語だけで終わるなら用途によってもっといい言語がありそう >>247ですが、>>253さんのコード目からウロコです!
thisもキャストできるんですね
不勉強なので>>255さんの仰る事が少し難しいのですが、インスタンスだから、ということでしょうか
今丁度その辺りを勉強しているところなので正しく理解できるよう頑張ります
皆さんありがとうございました ありがとう。
どうやらjavaを選択したことは間違いではなかった様子。
まだfor構文だが頑張る forいいじゃん
個人的に、Javaで書くときはなるべく質素に書くのが似合ってる気がする
拡張forとかfroEachとかStreamAPIとか言わずに
for (int i = 0; i < a.length; i++)の形が美しいとすら思う
単に個人的な意見です 美しいかどうかは個人の感覚だけど
短く楽に書けて、読みやすいのはメソッドチェインの方かな 個人的な意見をごり押ししていいなら無駄なカウンタ変数は美しくない
変数が再代入されるのもできる限り避けたい
よってforはあまり使わない カウントなどというバグの原因は内部でやらせておくに限る カウントのバグ、みたいなもんを針小棒大に扱って見せても白けるだけ 処理速度はともかく数字への無駄な依存をなくすことが悪いことのはずない
チューニングはボトルネックと判明してからでも遅くはない ループ書くと後々必ずループの中身を肥大化させるバカが居からなるべくループは書かない 終わらないループ
終わらないif文
終わらないメソッド
使い回され続ける変数
共通部分の大量コピペ
業務プログラムあるあるですな 仕様を決めつけて最適化しすぎると保守性が下がるんだけどな。 共通部分なんて程度で共通化すべきではない
それはたぶんたまたま同じなだけ
どうせすぐここだけ変えてほしいって要求が来てあっという間にIF文まみれになる
最初から別につくったほうがまし >>276
あるあるネタだね
画面ごとにデータ取得SQLを最適化したり頭悪いわ 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万の
間でやらしている。 >>276
クライアントが拘りの部分だけ設計時に最適化したがるんだよな
そんなとこ運用してからでいいだろというとこ
全部設計してくれてコーディングだけでいいなら任せるけどさ >>280
たまたま同じ部分をIFでなく継承でまとめたからって、おこる問題は一緒だ
むしろ継承はIF文より汎用性がないからIF文よりずっと悲惨なことになる
すなおにコピペで別クラスにしとこう >>282
初心者だと応用効かないか条件分岐の代わりにしか使えないとか
でもそもそもそういうこと言ってるんじゃないんだよ
ちゃんとオブジェクト指向わかってるば、たまたま共通のコードとかじゃなくて、設計段階で本質的に同じものでまとめて書ける
お前のはサブルーチンとして使ってるだけだろ >>283
設計段階で同じものだってわかってるなら何使ったってどうにでもなるわ!
オブジェクト指向関係ない
そのあとで実はここ違いますってなったとき
IF文:分岐を入れる
オブジェクト:ケースに応じて継承もしくは別クラス作成
コピペ:該当部分を修正
コピペが最優秀なんだけど その該当部分が鼠算で無限増殖していくのであっという間に手に負えなくなる
コピペは死罪 そんなに増えないって
結合テストのケースに応じてコピペすりゃいいんだ
どうせまとめたって機能別に試験させられるんだからそこがボトルネックのはず
むしろ同じテストが完了した時点で
同じものがたくさんできているので生産性が高いといえよう 同じ記述はメンテ的に良くないので避けるべき、と習ったよ
修正箇所を少なく作るのが江戸っ子らしい
ただそんな書き方は素人の俺には思いつかないのが問題 まとめたら単体まで作るときは楽なんよね…
まとまってるぶん網羅しやすいからブラックボックステストの試験ケース少なくて済む
でもIF文とか継承まみれになると可読性めっちゃさがる if文が増えるなら
業務分析が下手くそ
設計が下手くそ
コーディングが下手くそ >>292
おまえは神か?世界の複雑さを完全に把握してコントロールできるのか? 彡 ⌒ ミ 彡 ⌒ ミ
( ´・ω・) ( ´・ω・)
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
\/ / \/ /
 ̄ ̄ ̄ カタカタ ̄ ̄
彡 ⌒ ミ 彡 ⌒ ミ
( ´・ω・) .(・ω・` )ヾ < なぁ、これって
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
\/ / \/ /
 ̄ ̄ ̄  ̄ ̄ ̄
彡 ⌒ ミ 彡 ⌒ ミ
( ´・ω) .(・ω・` )
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
\/ / \/ /
 ̄ ̄ ̄  ̄ ̄ ̄
彡 ⌒ ミ .彡 ⌒ ミ
(´・ω・`) (´・ω・`) また、かみの話してる
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
\/ / \/ /
 ̄ ̄ ̄  ̄ ̄ ̄ >>286
仕様と1対1にできるのがオブジェクト指向のいいとこだろう
言ってることが真なら設計に戻るだけ
コードだけ変えてメンテできなくなるのは初心者が陥りがちな罠 >>289
それむしろ逆。共通化してしまうと仕様変更で別々になる可能性がある。
共通化は本当に共通化したい部分にすべきことであって、何でもかんでも共通化は間違い。 いまどきJavaでオブジェクト指向にこだわっているのは考え方が古い。 業務系はオブジェクト指向と相性いいからな
趣味とかは知らん ビット演算について教えて下さい。
ビット演算子(&,|, ^)の右側と左側で桁数が違うときは、どういう処理がされるのですか? >>302
データベースとのやりとりは結局、解決してないけどな。 >>303
例えば、8・16ビットで、ビット演算して、何ビットの結果が必要なんだ?
少ない方の結果が必要なら、多い方を、少ないビットに変換すればいいし、
多い方の結果が必要なら、少ない方を、多いビットに変換すればいい
多いビット・少ないビットの、変換関数を探すか、自分で作ればいい >>305
やりたいことは符号無しintをlongに型変換したいのです。
どこかのサイトを見たところ、
longNumber = unsignedInt & 0x00000000FFFFFFFF
とすればいいらしいのですが、
そもそも桁違いでビット演算したらどうなるんだ?というのが気になりまして。
小さい方を大きいほうの型にキャストしてるのか、
それともキャストしてるんじゃなくて桁を増やしてるのか…
桁増やすにしても、符号拡張してるのか、0で埋めてるだけなのか…
気になって夜も眠れますん。 >>306
目的に対してどうしてそういう手段でやっているのか? >>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というメソッドが用意されてるので
そっちが良いかも 型違いって言うのが、典型的なバグの条件
MISRA-C などでは、バグを防ぐために、
元から、型が異なるものを演算してはいけないというルール
「A 演算子 B」と書く場合、A, B は絶対に同じ型である必要がある
だから、この式の前に、絶対に同じ型にしているから、
型変換のルールに、疑問など生じない
>>308
に書いているような型変換のルールを、探してきて見直すような、
暗黙の型変換というのは、すごく単純な場合を除き、使わない方がいい
机上デバッグで、毎回、型変換のルールを見直して、
あれこれ議論しないといけないから面倒
しかも、開発メンバーが変わるたびに、説明・確認しないといけない
基本的に、言語仕様書を引っ張りだして、確認するようなものはダメ。
言語仕様書が必要な、コーディングをしてはいけない。
言語仕様書を見ない人もいるし、バグるだけ C言語はJavaより型付けが弱いんじゃないかな
ブーリアンもないし C言語には継承やクラスといった概念がないからね、比較すべきはC++ >>308
完璧な回答ありがとうございます。
私の知りたかったこと全てと、私の知らなかったことが入ってました。
L付けておきます。
残念なことに、java1.7なのです。androidなもので。 >>309
はーい。あざーっす。
オペランドの片側に(long)付けておきます。 今日からjavaはじめる
よろしくおまいら
初心者レベルだけどC言語から入ってjavaはじめるんだけど文字列結合とかキャストとか省略が許されててむずむずするわ 実装者が楽になる言語仕様がバージョンアップのなびに追加されるから
このせいで理解してない人が書いたクソコードが万延する諸刃の剣になってる >>316
本来の書き方をわかってて省略するのとそういうもんだと思って書くのとでは雲泥の差があるな booleanとBooleanが混在しまくってるコード見たときには気が狂いそうになった >>318
それだけじゃクソコードエピソードとしては弱いなぁ >>320
いきなりメソッドの初めで戻り値を変数に設定して、メソッド内で上書かずに最後でreturn。 Java最大の失敗はBean
これのせいで日本企業の所有するコードはパブリックアクセサだらけの地獄になった >>322
変更があった時に、その変数を弄べばいいだけになるから
割と良いと思うけど
逆の変更があったからあなたが見た状態になったのかも知れないし >>324
あなたの解釈だとコーディングミスを想定していない。 超初心者ですまん
メソッドを数値で分けて呼び出したいんだけど
今使ってるのがswitchでの分岐
int a;
switch(a){
case 1:
hoge();
break;
case 2:
hogee();
break;
}
みたいな
もっと効率の良いやり方があったら教えて欲しい >>326
幾つぐらい分岐するのかな?少ない場合はそっちの方が速いような気がするが。
分岐が沢山あるとか増え続ける可能性があるとか使う側で自由にセットしたいとかいう場合はまずinterface作っておいてその中にメソッドの定義を書いておく。
次にそれをimplementしたクラスを必要なだけ作っておき、HashMapにキーと共にインスタンスを入れておく。
後はそのHashMapからキーを使ってget()してメソッド呼ぶだけ。 c言語の入門書が一通り終わってオブジェクト指向も触りたくなったんでお勧めの入門書教えて下さい (´・ω・`)あのー
すべての文字列はStringクラスのインスタンスとしてあつかわれるっていう表現がうまくイメージできないの
じぶんなりにまとめたのは
String s = "こんにちは"
これは
String s = new String(こんにちは)
と同じでStringクラスをインスタンス化するときに、コンストラクタに対して引数としてこんにちはをわたしてる
そしてインスタンス化されたStringクラスのメンバ変数にこんにちはが代入された
同じようにすべての文字列は扱われるので、
すべての文字列はStringクラスのインスタンスとしてあつかわれると表現される
このイメージでいいの?
くわしいひとおしえてくれませんか? >>329
Stringはよく使うクラスだから、特別な表記があるだけ。 >>328
この本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014 ■ このスレッドは過去ログ倉庫に格納されています