タグ

javaとprogrammingに関するtarchanのブックマーク (107)

  • 異型のオブジェクト比較 - プログラマーの脳みそ

    異なる型のオブジェクトの順序比較が今回のテーマ。 Javaの場合、オブジェクトの順序を比較する王道はふたつある。 ひとつはjava.lang.Comparable *1(こんぺあらぶる)を実装する「自然順序付け」と呼ばれる方法。 public class A implements Comparable<A> { int a; @Override public int compareTo(A o) { return this.a - o.a; } } もうひとつはjava.util.Comparator (こんぱれーたー)を用いる方法。*2 public class MyComparator implements Comparator<A> { @Override public int compare(A o1, A o2) { return o1.a - o2.a; } } 見て分かるよう

    異型のオブジェクト比較 - プログラマーの脳みそ
  • クラスを作ることをサボらない - 絵描きエンジニアの日常

    JJUG CCC 2018 Fallのいくつかのセッションで型についての話があったので書きたくなった。 この話はJavaScalaみたいな静的型の世界の思想で、多分Rubyとかでは違う思想だとおもう。 Javaを書いてるときのおれきゅーの脳内 型を定義して取りうる値を狭めることで 間違った使い方ができないようにする ことを最初に考えてる。多分。防御的プログラミングってやつなのかな?しらんけど。 とにかくエラーはより早いタイミングで見つかるほうが良くて、実行時よりコンパイル時にわかるほうが便利だし、コンパイル時よりエディタ上でリアルタイムに分かるほうがもっと良い。 たとえば汎用的な型を使うとこんなミスがあり得る。 long id = 10; new User(id); new Item(id); 静的型なら多分こうかけるほうが間違えなくて嬉しい。 Id<User> id = Id.of(1

    クラスを作ることをサボらない - 絵描きエンジニアの日常
  • LL から Java に移行した人がはまりがちなこと - tokuhirom's blog

    こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e.printStackTrace(); } Perl

    tarchan
    tarchan 2014/10/09
    重要>例外を握りつぶさない
  • いまさらですが、職業Javaプログラマーなら理解しておいてほしい「継承」の意味について - 達人プログラマーを目指して

    正しく意味を理解している方にとっては、まったく常識レベルの話であり、何をいまさらと思われる方々も多いかと思いますが、大規模案件のレガシーコードなど、私が仕事で見かけるJavaのコードを読むと、「このコードを書いたSEやPGの方々は、はたして継承の意味を正しく理解していないのではないか」と思われる設計のコードに出会うことが少なからずあります。現在では改良されましたが(Javaプログラミング能力認定試験の問題がかなり改善されていました - 達人プログラマーを目指して)、以前のJavaプログラム認定試験の問題は、そうした不適切な設計がされている典型的な例となっていたのですが、実際、SI業界ではあのような品質のコードのシステムが今でも現役で多数稼動しているというだけでなく、現在でも新たに生み出されているというのは残念ながら紛れもない事実のようなのです。 確かに新人研修で「哺乳類を継承して犬クラスと

    いまさらですが、職業Javaプログラマーなら理解しておいてほしい「継承」の意味について - 達人プログラマーを目指して
  • はてなブログ | 無料ブログを作成しよう

    わたし的棚ぼた一万円選書 急に千葉さんに手渡された封筒、開けてみたら1万円札が1枚。何ごとかと思えば、同期の出張を代わったお礼をもらったらしい。 「葵はワンオペで育児してくれたから」と半分わけてくれました。 泡銭の1万円 これはもう、わたし的1万円選書をしろという思し召しなのでは……

    はてなブログ | 無料ブログを作成しよう
  • コードを改悪されて本気でプログラマ辞めようかって脳裏をよぎった - (define -ayalog '())

    2013-12-04 コードレイプされて気でプログラマ辞めようかって脳裏をよぎった Java 開発 つらい現実。 「だから言ったのに」事案2013-12-04 11:05:15 via web 自分の書いたプログラムが大陸人の手によって改悪されまくってて涙で前が見えない。2013-12-04 11:16:49 via web あのね。。拡張for文で書いてたのにfor(int i=0; i<items.length; i++)って書きなおされてたんだ…。2013-12-04 11:18:41 via web てか、嘘でしょ。なんでSetをtoStringして文字列表現にして「,」でsplitするとか考えるの…。意味分かんないんだけど…。2013-12-04 11:19:51 via web こう、胸の奥がキューッてなってる。苦しい。2013-12-04 11:21:11 via web

    tarchan
    tarchan 2013/12/12
    これでバグったら無料で修正作業が入って炎上ですね>自分のコードを上書きされて改悪されるとは思わなかった。
  • 特集 私がJavaからC#に乗り換えた10の理由(1/4) - @IT

    起きてから寝るまで、息を吸うのも、厠(かわや)での一連のアクションも.NET Frameworkで構築している私だが、実は少し前まで目を閉じるとまぶたの裏でJavaのマスコットである“Duke”がゴーゴー・ダンスを踊っちゃうくらいにJavaな日々を送っていた。そんな私が過去の資産を捨てて.NET Frameworkに転んだ理由は簡単。.NET Framework、特にC#の設計思想が私のし好に合っていると感じたためだ。 稿では、私がJavaからC#に乗り換えた理由を示し、それを基にC#の“正しい”使い方について考察する。C#に興味のあるJavaプログラマや、どう使えばよいのか悩んでいるC#プログラマに読んでいただきたい。そうそう、アーキテクトにも。プログラミングできないアーキテクトなどあり得ないのだから。 C#とJavaは似ていない。確かに表面上は似ているが、C#にはJavaにはない文法

  • Javaの7大禁じ手 - Kengo's blog

    Javaの7大禁じ手」というブログタイトルを思いついたので、なんとかして7つダメコードをでっちあげたいless than a minute ago via Twitter for iPhone Favorite Retweet ReplyKengo TODA eller86 などと書き込んだところいくつかネタ提供を頂きましたので、自分のネタと合わせてまとめてみました。Thanks to @flyaway ! Stringインスタンス同士を==で比較 Javaプログラムを始めた人がまず引っかかるのがこれでしょう。厄介なのは System.out.println("abc" == "abc"); // => true System.out.println("a" + "bc" == "abc"); // => true といったコードが期待通りに動作してしまうということです。 System.

    tarchan
    tarchan 2013/02/28
    >1024個のStringBuilderインスタンスと1024個のStringインスタンスを使い捨てることになります。Javaヒープの総使用量は1MiBを超えるでしょう。
  • まともじゃないJavaプログラマたちの日常会話

    irof @irof 言葉はよく聞くし、だいたいはわからなくもないけど、それを実現するために何がいるかわからない……あぁ、これが基礎か(遠い目 2012-11-21 10:43:11

    まともじゃないJavaプログラマたちの日常会話
    tarchan
    tarchan 2012/11/22
    >thow this;
  • 四則演算をするスタックマシン - 虎塚

    さくらばさんのマカロンスタックの写真を見ていて、ふと書きたくなったので。 逆ポーランド記法を入力として四則演算を行い、結果を返します。 (追記: 2012/9/6) この記事のコードには、誤りが2箇所あります(1:除算のオペランドが逆、2:テストデータは"14+37+*5/"が正しい)。修正した次の記事を参照してください。http://d.hatena.ne.jp/torazuka/20120906/stackmachine 逆ポーランド記法とは? こういう計算があったとして・・・ (1 + 2) * 4 + (4 - 2) 逆ポーランド記法で書くと、こうなります。 1 2 + 4 * 4 2 - + 括弧を使わずに四則演算を表現できます。 括弧を使わないということは、計算の途中結果を複数個保存しておく場所が必要がありません。つまり、使用するメモリを節約できるのだそうです。 package

    四則演算をするスタックマシン - 虎塚
  • いまさら聞けないJavaによるオブジェクト指向の常識

    いまさら聞けないJavaによるオブジェクト指向の常識:プログラマーの常識をJavaで身につける(11)(1/5 ページ) 連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、Javaを学習する際によく耳にする「オブジェクト指向」について。いまさら聞けない人はぜひ読んでみてください。 いまこそ振り返る「オブジェクト指向」 今回は、オブジェクト指向プログラミングの常識について、Java言語を通じて学んでいきます。 この連載「プログラマーの常識をJavaで身につける」では、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象としています。そのため、稿をご覧になっているJava言語や

    いまさら聞けないJavaによるオブジェクト指向の常識
  • Rubyと大クラス主義とダックタイピング、そして名前重要 - ゆとRubyist日記

    最近、Javaを勉強したりしていて、RubyJavaとの対比で昔より客観的に見られるようになったので、Rubyの記事を書きたいと思います。自分でも消化しきれていない話なので、反論は大歓迎です。 内容は、大クラス主義とダックタイピング、そして名前重要に関してです。 大クラス主義 Rubyの考えでよく言われるものに、大クラス主義があります。例えば、RubyのArrayは配列を表すクラスです。しかし、Arrayができることは、単純に値を複数持てるだけではありません。Arrayを調べてみると、popやpushやshiftやunshiftがあります。つまり、RubyのArrayはキューやスタックとしても使えます。一方、JavaのArrayやArrayListでは、配列の要素を扱うことはできますが、そのままではキューやスタックとしては使えません。Javaでキューやスタックが使いたいのであれば、例えば

    Rubyと大クラス主義とダックタイピング、そして名前重要 - ゆとRubyist日記
    tarchan
    tarchan 2012/04/05
    >慎重にメソッドに名前を付けると、ダックタイピングによってプログラムが動きます。と同時に、その名前が責務を表し、その責務を全うします。
  • Javaの冗長な記法って小クラス主義の現れではないかな - 矢野勉のはてな日記

    Java以下は無駄に長い駄文です。なんか書いてみたはいいもののうまくまとまらなかった。ごく一部しか表せなかった気がする。これではInputStreamReaderとかがたくさんオブジェクトを連結しないと使えないめんどくささをなぜ許容できるか、しか表せてない... もともとは「 Java における質的でない記述がどのように大規模開発に役立つのか - kwatchの日記」がらみの話です。文中にいくつか「アクセッサが簡潔に定義できない」「FileReader に文字コードを渡せない」のような例があって、「それらが改善されたら大規模開発になにか不利益があるのかどうか」という具体的な質問があったので私はそこにコメントしときました。私はコメント欄に「不利益なんてないよ」と回答しました。実際のところ、後方互換性が維持され、言語としての統一性が維持されるなら別に不利益なんてあるわけない。あるとしたらマネ

  • Javaのクラスとオブジェクトについて再度解説を試みる - 達人プログラマーを目指して

    オブジェクト指向プログラミングの考え方については、今までこのブログでも何度か取り上げてきました。 [オブジェクト指向] - 達人プログラマーを目指して オブジェクト指向プログラミングはプログラミング技法のすべてではないとはいえ、Javaのようなオブジェクト指向言語で格的なプログラムを作るには理解を避けて通ることができませんし、また、関数型言語など他のパラダイムの言語を利用するにしても、オブジェクト指向の考え方をまったく理解しないまま使いこなすということは困難でしょう。オブジェクト指向の考え方はデータ構造やアルゴリズムといったことと同様に、プロフェッショナルなプログラマーが理解しておくべき基的な素養といってもよいと思います。実際、海外では募集要項でオブジェクト指向の理解を前提とすると書かれていることが普通ですし、プログラマーの面接試験で、アルゴリズムと並んでオブジェクト指向プログラミング

    Javaのクラスとオブジェクトについて再度解説を試みる - 達人プログラマーを目指して
  • Javaでゲーム作りますが何か? - 人工知能に関する断創録

    Javaを使ったゲームプログラミングについて書いてます。 プログラムはJAR形式で公開しているのでダブルクリックで実行してください。 ソースファイルはJARファイルの中に入っているので解凍してご覧下さい。基的に全部ソースファイル入ってます。著作権を主張することはないので自由に使ってください。 リンク切れやリンク先がおかしいなどありましたらコメントをいただけると助かります。 ブログはその他雑多な記事も多いため、記事下にあるナビゲーション機能はほとんど役に立ちません。このページを起点としてリンク先へ、読んだら戻るといった使い方が楽だと思います。 リンク先がない項目は面倒くさくなって解説を書いておらず、ソースファイルの提供のみとなっています。ご了承ください。 かなり昔の記事なので細かい内容に関する質問に私からはお答えできないと思います。もっと人が多いサイトで聞いた方がよいかもしれません。 NE

    Javaでゲーム作りますが何か? - 人工知能に関する断創録
  • 一歩先行くJavaプログラマが読むべきオープンソースソフトウェア10選 - 設計と実装の狭間で。

    10万行コード読んだらJava分かるよってTwitterに書いたらすげぇ勢いでRTされたので、調子に乗って捕捉エントリ書くよ。 Java Core API JDKインストールしたディレクトリに入ってるsrc.zipを展開すると入ってるから読むと良いよ。 すぐ近くにあるのから読むってのはメンタル的に楽でいい。 厳密にはOSSじゃなくて単に公開されてるってだけなんだけども、JavaプログラマなのにコアAPIのコード読んでないとか無いよね? どれから読めば良いか分からんかったら、 java.lang java.util java.io java.text 辺りをまずはキチンと理解すること。当然コードを読み終わったら、それを使ってコードを書く事。 OpenJDK http://hg.openjdk.java.net/jdk7/jdk7 OpenJDKを読むことで、プログラム言語してのJavaではな

    一歩先行くJavaプログラマが読むべきオープンソースソフトウェア10選 - 設計と実装の狭間で。
  • Javaで覚えるIT技術者の40の常識 - @IT

    ~新人プログラマ/SEは覚えておきたい“まとめ”~ @IT編集部 2011/3/24 このページは、開発者/プログラマが、以下のような項目に関して、常識的な基礎知識を学ぶための記事リンクのまとめです。 デスクトップなどの見た目に関する3つの常識 プログラミング・コーディングに関する6つの常識 ネットワーク/通信に関する9つの常識 セキュリティに関する3つの常識 データとファイルに関する5つの常識 設計・アーキテクチャに関する6つの常識 ソフトウェアの品質管理に関する3つの常識 業務アプリに関する5つの常識 Java SE(旧、J2SE)のコアAPIやJSP/サーブレット+StrutsのWebアプリケーション開発、JBossやその他のJavaオープンソースソフトウェアのサンプルコードや使い方を通じて、さまざまな“常識”を学習する以下の連載の記事に、基礎知識のカテゴリごとに分けてリンクしていま

  • Javaプログラマが知るべき9のこと - @katzchang.contexts

    はじめに ソースコードは設計であり、コードの記述は品質に直結するのは言うまでもない。ちなみに、プログラマにとって特に重要なのは保守性だ。コードは書いた直後から保守対象となるからだ。コードは要求文書の範囲で動けばいいと思っている人がいれば今すぐ、ソースコードをコピペして100klに増えるプラグインがいつの間にかインストールされる呪いをかけてあげよう。幸い、ここを読んでいる人にはそんな人はいないだろうと思うけれども。 ということで、コードの品質を下げる要因、すなわちシステム全体の品質を下げる要因となり、かつ使われやすいアンチパターンを挙げ、対策を検討していくことにする。対象は以下: 出力パラメータ 処理状態返却 意味のある配列 無意味な初期化 多すぎるtry-catch 暗黙の順序 コンパイラ警告の無視 過剰なコメント e.printStackTrace() 出力パラメータ メソッドの引数にオ

    Javaプログラマが知るべき9のこと - @katzchang.contexts
  • はてなブログ | 無料ブログを作成しよう

    理解はできるけどそれだけだな 「ピザ屋の匂いって、全部他人が注文したものから香る匂いだと思うと、悔しいよな」と友人に言ったら「理解はできるけどそれだけだな」と言われた。全く持ってその通りだ。この言葉を発する時、自分は日語のテクニックだけで言葉を作っていて、伝えたい想いとかそう…

    はてなブログ | 無料ブログを作成しよう
  • Javaで戻り値の型パラメータにワイルドカードを使う意味 - 矢野勉のはてな日記

    java例えば次のようなメソッドを考えてみる。Bookはまあ、独自クラスだとする。 List getBooks(); これを次のようにすることに意味はあるのかどうか。 Listextends Book> getBooks(); メソッドの戻り値にワイルドカードを使ったところで、結局、Bookの固有のサブクラスで結果を受け取れるわけではない。これはコンパイルエラー List books = getBooks(); 受け取るにはこうすることになるでしょう。 Listextends Book> books = getBooks(); Listでは受け取れない(コンパイルエラーになる)。Listから値を取り出す場合、結局のところ、下限型であるBookとしてしか取り出すことはできない。もちろん、booksの中にはBookのサブクラスが入っている可能性もあるけど、サブクラスにするには、instance