Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
自分で例外クラス定義したり newしたりしないのかな してもいいけどだいたいは元からあるやつで済みそう。 構造体的なものを使いたい時に、クラスを使っているのですが Public class Hoge { public int fuga; public int piyo; } とやって、更にgetFuga,setFugaなどのメソッドを実装するのと メソッドを使わず、利用の中でtest.fuga=3などと直接触るのでは Java的には前者のほうが推奨なのでしょうか? (カプセル化?っていうんでしょうか?) また、その場合にはクラスもPublicではなくPrivateにして外から触れなくするのが良いのでしょうか? よろしくお願いいたします >>577 パブリックなアクセサ作ったら カプセル化にならぬよ フィールドをパブリックで公開するのがモダンなインプリメンテーション >>577 物による 振る舞いを持ったオブジェクトならフィールドもアクセサも公開しない データならフィールド丸出し >>577 他のクラスからいつ書き換えられてもいいならpublicにしとけば良い。 書き換えられた時に何かそれにまつわる処理をしたいならprivate等の外から直接アクセスできないやつにしてsetter経由でしか書き換えられないようにすれば良い。 読み出しのみ可能にしたいなら同様にprivate等にしてgetter作っておけば良い。 >>578 アクセサメソッドはカプセル化というよりは不正な値の代入や取得を防止するのが主な目的だと思うけどね なのでフィールドはprivateにしてアクセサメソッドをpublicにする フィールドをpublicで公開するのがモダンなimplementationだというのは初めてきいた C#もそうだけどモダンな言語ってのは関数型の取り込みが進んでるんだよ(Javaはモダンじゃないって?) んで関数型はデータを純粋なデータとして扱う事が多い だから隠蔽されたクラスより公開された構造体の方が合ってるんだね 質問です。 コンストラクタにはpublicを付けた方がいいのでしょうか? それとも付けない方がいいのでしょうか? >>587 コンストラクタの意味合いから考えて通常はpublicをつけます 逆にprivateをつけた時の効果とそれにより考えられる効能を想定してみましょう >>585 恐らく三角形の底辺の右か左の尖ってる所 class X { private X() {} } 俺の心の中でしか new できないクラス 自身の初期化済みオブジェクトを返すクラスメソッドだけからしかオブジェクト生成をさせたくない時(があるのかしらんが)とかかねぇprivateコンストラクタを定義するとしたら 昔はsingletonにする時によく使ってたけど、最近はDIコンテナに任せちゃうからなあ 遅い時間に失礼します。 回答をくれた方ありがとうございます。 publicを付けるか付けないかで具体的に何が変わるのでしょうか? 例えば、 public class A { int a; A() { a=1; } } と public class A { int a; public A() { a=1; } } とでは何が違うのでしょうか? 2度目になりますが、回答の方よろしくお願いします。 >>595 publicはデフォルトコンストラクタを明示 privateはデフォルトコンストラクタを使用禁止 >>577-582 フィールドを直接アクセスするのは、同じクラス内だけ。 同じクラス内のソースコードを書く人は、 同じ会社・人物だから、勘違いが少ないから、OK そのクラスの外からアクセスする人は、必ず、アクセッサを通す。 これは異なる会社・人物を想定しているから、 コメントで説明するだけじゃ、不十分 コメント通りに、プログラミングするかどうか、分からないため、 必ず、アクセッサを通して、不正な値ではエラーにする もし、エラーにしなかったら、不正な値でも動いてしまって、 後に、別の場所で、別のエラーになるから、原因を突き止めるのが難しくなる エラーの原因と、エラーになる場所が遠くなるから、ダメ >>598 そんな事やったら複雑になるだけだよ データチェック用のクラスは別で用意して モデルにデータチェックを持ち込まないようにしましょう MVC の、ビューでチェックするのか? ドラクエ10 の話を読むと、ネットから来るデータは、 500バイトに1バイトは間違っているから、絶対に信用しちゃいけない なぜなら、途中のルーターが、データが間違っていても破棄せず、 間違ったデータで、チェックサムを再計算するから、正しいように見えてしまう >>602 するでしょ 典型的なServlet/JSPだとViewってJSPでしょ? 最初にjavascriptで入力チェックしてリクエスト発生前にわかる誤りは指摘するわ >>596 >>597 ありがとうございました。 自分でももう少し勉強してみます。 入力を受け取るDTOとドメインモデルは分けるっしょ バリデーションはチェック専用のオブジェクト作ってそこに集約するっしょ >>602 サーバー側でやるならコントローラとモデルの中間 >>602 500バイトに1バイト?そんなに間違うかなあ?UDPパケットでもそんなの気にした事ないなあ。IPレベルではそんなエラー沢山出てるのか? Kotlin使えばgetter,setterで悩まんで済むのではないだろうか。 >>610 1/500 = 0.2% 確か、伝送エラー率も、これぐらいだったと記憶している。 まあ、チートもあるだろうけど 超初心者です。 文字列で疑問に思ってのですが、文字列を(A)のパターンで使おうと思ったのですが、 (B)のパターンもあるみたいなのですが、 (A)のパターンだけでプログラムを組んでいても問題ないでしょうか? (A) String str = "あいうえお"; (B) String str = new String("あいうえお"); >>616 全く問題ない。 てか、Bの方はメモリや時間の無駄だよ。実際には最適化されてAと同じになるとは思うけどね。 本当に「(B)のパターンもあるみたい」なのだと思っているのだとすれば自分の読解力を疑ったほうがいい CやC++やってた人だと "" だけで既に String クラスのインスタンスである事がすぐにわからんのかもね。 ていうか見た目が同じものなのに違う意味になってて混乱。やがて "abc".charAt(1) で 'b' が返される事に気付く。 >>619 >Bの方はメモリや時間の無駄だよ ?? AとBで意味が違うと思う方がおかしい 初歩的な質問で失礼します。 substringがなんともしっくりこないので、昔のBASICで言うところの「mid」を作ってみたのですが、 呼び出し元の「Test.java」から呼び出し先の「strmid」関数を呼び出す場合、 下記のような感じでよろしいでしょうか? ■Test.java(呼び出し元) public class Test{ public static void main(String[] args){ String a = "1234567890"; a = Mod_string.strmid(a, 5, 2); System.out.println(a); } } ■Mod_string(呼び出し先) public class Mod_string{ public static String strmid(String _str, int _index1, int _index2){ String cut_buff = ""; cut_buff = _str.substring(_index1, _index1 + _index2); return cut_buff; } } 訂正です。 ■Mod_string(呼び出し先) × ■Mod_string.java(呼び出し先)○ >>624 いいわけないだろ、何だその変数名は! 真面目にやれよ、ここ2chだぞ!! >>623 そういうのの最適化は保証されてるんだっけ? Mod_stringじゃないBasicだ! strmidじゃないmidだ! cut_buffは要らないです midでは切り取る長さが文字列の長さより長かったらどうなるんだ、条件分岐が必要なんじゃないか >>629 ここは初心者スレなんだから質問者の提示したソースがあるならそれをベースに話そうぜ おまえのルール適用はおまえの環境でやれ >>632 初心者だからこそよりベターな書き方を身に着けないと、何も言われなかったからこれでいいんだJava完全に理解したということになるんだよ お前はただの無責任でいい加減で良い人と思われたいだけの甲斐性なしの童貞ニートだよ!! 動かして確認しなとかシンナーで脳ミソ半分溶けたスケバンでも言えるだろ スケバンとはスケベ番長のことです よろしくお願いします >>633 目的をどこにおくかだよ 記載レベルの正しさなんかプロジェクト毎に異なるんだからそんなもん後でいい 残暑が彼をこのようにしてしまったのだろうか。残暑も酷なことをするものだ。 >>636 バッキャロー、そのプロジェクトを作るのがJavaを 完全に理解した人たちなんですよ 変数名も使用もろくに考えない人間をいまあなたが作り出そうとしている、ああ、あなたはとても罪な人 midのスタートポジションって1オリジンじゃなかった? せやろ このようにいろんな観点からコードを分析してアドヴァイスできる私は夏の妖精と言っていいでしょう 儚い命ですが秋にはナスビの妖精になるので気にしなくて大丈夫です >>635 いやいや鮎川まどかみたいな奴のことだろ JAVAを独学してますが実際にプログラムを書いたほうが覚えがいいと思うのですが 仕事で勉強していたら嫌でも書くことあると思いますが、独学の場合だとどういう風にしたら たくさんプログラムが書けるでしょうか? プログラム好きだから就職するならともかく 就職したいからプログラム勉強するって心構えだと鬱になって死ぬぞ 好き嫌いとか心構えとかそういう話じゃなくね? 興味あるから独学でもやっているんだろうし ただ、 「個人では次々とプログラム案が浮かばない」 「だけどコードはたくさん書いてみたい」 「そういう場合実際的にはどうしたらいいのか?」 ってことじゃないの? 仕事で使われるJavaはWeb一択 仕事したことない奴がWebの包括的な知識を得ることを無理 原始人がパソコンを使おうと努力するぐらい時間の無駄 若いなら未経験可でも採用してくれる零細ブラックに潜り込んだほうが1万倍早い おっさんなら諦めろ Javaって組み込みとかには使われてないのかな?元々Sunは家電組み込み用としてJava作ったらしいが。 あ、Androidのスマホは見ようによっては組み込み機器か。 今の大手SIerはノンプログラミングツールが主流だぞ みずほ銀のやつなんて、JAVA要員を全部ノンプログラミングツール要員に切り替えたし 食うのが目的ならプログラムより英語とかビジネスマナー覚えた方が確実に良い 最近はツールやサービスが充実してるからインフラに詳しくなくてもそれなりにWEB開発できてしまうよね 昔ほど初心者の参入障壁はないよ (´・ω・`)スッキリわかるJava入門と実践編読んでます みなさんはJava8のラムダ式とか勉強用にJava8参考書買ったの? いま新しいJava8用の参考書かおうかまよってるのー なにかおすすめの参考書とかあれば教えてもらえませんか よろしくです (´・ω・`)ラムダ式のためにわざわざ本なんて買わなくていいとおもうの スッキリの入門編と実践編を読んでも、どうせ実践なんてしてないんだろうなー 次の参考書のことばかりかんがえてさ (´・ω・`)にちゃんよりもついったーで聞いたらいいとおもうの どういたしましてです まあ、よくもまあこんな事までできるようにしたなあ、という感じではある。 ラムダ式のために、本を買うなんて、考えたことは無い。 スッキリを読んだ後は、この辺を読むから たのしいRuby 第5版、2016 プログラミング GROOVY、2011 Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016 >>669 たのしいRuby(笑)売れないから必死だねぇ そういや Ruby や Python は未だに覚える気が起きないな。Perl やり過ぎたか・・・ スクリプト言語はツールの拡張で使わざるを得ないでいつの間にか習得している事が多いな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる