Advanced Tech Night No.2



   大阪から来たJava Puzzlers
    ~ Google I/Oに行ってきました

                           せんで
                            2011/07/22
                                谷本 心
今日のテーマ




  Google I/O 2011


                               1
         Advanced Tech Night
Google I/O 2011

• 2011/05/10~11@SanFrancisco
• Googleの技術イベント

• 2トラックの動画をライブ配信
• 2~3日後には全トラックの動画を配信

• 今年はAndroidが中心
• 今年はビジネスや課金に絡む話も多め

                                        2
                  Advanced Tech Night
今日のテーマ




 そんなGoogle I/Oで
  見つけた「Java」

                               3
         Advanced Tech Night
それが・・・




    Java Puzzlers


                               4
         Advanced Tech Night
Java Puzzlers by …




        Joshua Bloch


                                      5
                Advanced Tech Night
本日のメイントピック




   Java Puzzlers
         in
  Google I/O 2011

                              6
        Advanced Tech Night
1. ウォーミングアップ

public static void main(String args[]) {
     System.out.println(2.00 - 1.10);
}




   a) 0.90
   b) 0.9
   c) 1
   d) その他

                                           7
                   Advanced Tech Night
1. ウォーミングアップ(回答)

public static void main(String args[]) {
     System.out.println(2.00 - 1.10);
}




   出力結果)
   0.8999999999999999



                                           8
                    Advanced Tech Night
2. おつりの計算

import java.math.BigDecimal;
public class Change {
      public static void main(String args[]) {
            BigDecimal payment = new BigDecimal(2.00);
            BigDecimal cost = new BigDecimal(1.10);
            System.out.println(payment.subtract(cost));
      }
}


    a) 0.90
    b) 0.9
    c) 1
    d) その他

                                                    9
                       Advanced Tech Night
2. おつりの計算(回答)

import java.math.BigDecimal;
public class Change {
      public static void main(String args[]) {
            BigDecimal payment = new BigDecimal(2.00);
            BigDecimal cost = new BigDecimal(1.10);
            System.out.println(payment.subtract(cost));
      }
}


    出力結果)
    0.899999999999999911182158029987476766109466552734375



                                                            10
                           Advanced Tech Night
2. おつりの計算(回答)




                                11
          Advanced Tech Night
2. おつりの計算(教訓)

1. 精密な数値計算ではBigDecimalを使いなさい。
2. BigDecimalでは、引数がStringのコンストラクタ
   を使いなさい。


3. 普通に使った時に問題が起きないような、
   APIをデザインしなさい!!




                                   12
             Advanced Tech Night
3. 小学校の足し算

public class Elementary {
      public static void main(String[] args) {
            System.out.print(12345 + 5432l);
            System.out.print(" ");
            System.out.print(01234 + 43210);
      }
}



    a) 17777 44444
    b) 17777 43878
    c) 66666 44444
    d) 66666 43878

                                                 13
                       Advanced Tech Night
3. 小学校の足し算(回答)

public class Elementary {
      public static void main(String[] args) {
            System.out.print(12345 + 5432l);
            System.out.print(" ");
            System.out.print(01234 + 43210);
      }
}



    出力結果)
    17777 43878



                                                 14
                       Advanced Tech Night
3. 小学校の足し算(回答)

public class Elementary {
      public static void main(String[] args) {


           System.out.print(        1     2345 + 5432   l);
           System.out.print(" ");                           まさかの
           System.out.print(01234 + 43210);                 Long!
      }
}
             0xから始まるのは16進数表現
              0から始まるのは8進数表現

            1234 (8進数) = 668(10進数)




                                                                15
                        Advanced Tech Night
3. 小学校の足し算(教訓)

1. longのリテラルでは、大文字のLを使いなさい。
2. 変数名でも l は、やめなさい。
3. 0から数字を始めてはいけない。
   本当に8進数を使うなら、コメントをつけなさい。




                                 16
           Advanced Tech Night
4. アプリの価格
public class AppPrice {
    public static void main(String[] args) {
           System.out.println(createMessage(“¥¥85.0”) + “¥t“);
           System.out.println(createMessage("$0.99"));
    }

    private static String createMessage(String value) {
        return "Price:%%%".replaceAll("%%%", value);
    }
}

    a) Price:¥85.0      Price:$0.99
    b) Price:%%%        Price:%%%
    c) Price:85.0       Price:0.99
    d) その他

                                                          17
                          Advanced Tech Night
4. アプリの価格(回答)
public class AppPrice {
    public static void main(String[] args) {
           System.out.println(createMessage("¥¥85.0") + “¥t“);
           System.out.println(createMessage("$0.99"));
    }

    private static String createMessage(String value) {
        return "Price:%%%".replaceAll("%%%", value);
    }
}

    出力結果)
    Price:85.0    Price:%%%.99



                                                          18
                          Advanced Tech Night
4. アプリの価格(回答)




                                19
          Advanced Tech Night
4. アプリの価格(回答)




                                20
          Advanced Tech Night
4. アプリの価格(教訓)

1. replaceAllやsplitが正規表現を使っていることに
   留意しなさい。
2. replaceAllを使う場合、第二引数の¥や$はエス
   ケープしなさい。
  •   Matcher.quoteReplacement
3. String#replaceやStringUtilsを利用しなさい。




                                           21
                     Advanced Tech Night
今日のまとめ


                        22
  Advanced Tech Night
今日のまとめ

1. 直感的なAPIデザインを心がけなさい。
2. LやIなどの1文字変数は、やめなさい。
3. 意図せぬ正規表現に気をつけなさい。


4. Java Puzzlers、超おもしろい!
5. Google I/Oも、超おもしろい!



                                   23
             Advanced Tech Night
今日の本当のまとめ




  セミナーの動画を
    見なさい

                              24
        Advanced Tech Night
今日の本当のまとめ




   海外セミナーに
    行きなさい

                              25
        Advanced Tech Night
本当に言いたかったこと



   JavaOne2011に
    一緒に行こう!

  2011/10/02~06
                              26
        Advanced Tech Night
ご清聴ありがとう
 ございました

                         27
   Advanced Tech Night

More Related Content

PDF
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
PDF
Casual learning machine learning with_excel_no6
PDF
Casual learning machine_learning_with_excel_no7
PDF
ディープニューラルネット入門
PDF
PoisoningAttackSVM (ICMLreading2012)
PDF
Enjoy handwritten digits recognition AI !!
PDF
Casual learning-machinelearningwithexcelno8
PPTX
機械学習入門
自然言語処理に適した ニューラルネットのフレームワーク - - - DyNet - - -
Casual learning machine learning with_excel_no6
Casual learning machine_learning_with_excel_no7
ディープニューラルネット入門
PoisoningAttackSVM (ICMLreading2012)
Enjoy handwritten digits recognition AI !!
Casual learning-machinelearningwithexcelno8
機械学習入門

Viewers also liked (8)

PDF
ATN No.2 Scala事始め
PDF
明日から使える Java SE 7
PDF
明日から使えるgradle
PDF
JVMの中身を可視化してみた
PDF
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
PDF
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
PDF
JJUG CCC 2014 fall Javaが見るニュータイプの夢
PDF
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
ATN No.2 Scala事始め
明日から使える Java SE 7
明日から使えるgradle
JVMの中身を可視化してみた
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
Spring Boot + Doma + AngularJSで作るERP #jjug_ccc #ccc_r12
JJUG CCC 2014 fall Javaが見るニュータイプの夢
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall

Similar to ATN No.2 大阪から来たJavaPuzzlers (20)

PPTX
Enshu8
PDF
[コデアル][Programming24]Androidアプリ勉強会01
PDF
魂のコーディング
PDF
Processing
PDF
Javaセキュアコーディングセミナー東京第1回演習の解説
PDF
教育向けプログラミング環境 Scratchのご紹介
PDF
Android道第1回公開用
PDF
Programming24 第3回Androidアプリ勉強会
PDF
Scala conf2013
PDF
Javaセキュアコーディングセミナー東京第2回講義
PDF
Kink: invokedynamic on a prototype-based language
PDF
はじめてのテスト技法
PDF
第1回内容の振り返り
PDF
Programming24 第2回androidアプリ勉強会
PDF
「いいコード」をみんなで書こう!
PDF
Hello, Guava ! samples
PDF
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
PDF
LITメンター研修_Android0212
PPTX
ドッターのためのプログラミングなにそれおいしいの
PDF
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Enshu8
[コデアル][Programming24]Androidアプリ勉強会01
魂のコーディング
Processing
Javaセキュアコーディングセミナー東京第1回演習の解説
教育向けプログラミング環境 Scratchのご紹介
Android道第1回公開用
Programming24 第3回Androidアプリ勉強会
Scala conf2013
Javaセキュアコーディングセミナー東京第2回講義
Kink: invokedynamic on a prototype-based language
はじめてのテスト技法
第1回内容の振り返り
Programming24 第2回androidアプリ勉強会
「いいコード」をみんなで書こう!
Hello, Guava ! samples
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
LITメンター研修_Android0212
ドッターのためのプログラミングなにそれおいしいの
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)

More from AdvancedTechNight (20)

PDF
CSS3Rendererを使ってiOSでもサクサク3D
PDF
D3.jsと学ぶVisualization(可視化)の世界
PDF
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
PDF
CSSだけで実現するグラフィック表現
PDF
これから利用拡大?WebSocket
PDF
全部入り!WGPで高速JavaScript+HML5体験
PDF
Backbone.js入門
PDF
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
PDF
three.jsで作る3Dの世界
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PDF
Stormの注目の新機能TridentAPI
PDF
Spine入門
PDF
分散ストリーム処理フレームワーク Apache S4
PDF
Twitterのリアルタイム分散処理システム「Storm」入門 demo
PDF
Twitterのリアルタイム分散処理システム「Storm」入門
PDF
ログ収集フレームワークの新バージョン「FlumeNG」
PPTX
Hadoop scr第7回 hw2011フィードバック
PPTX
ななめ45°から見たJavaOne
PPTX
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
PPTX
ATN No.1 Hadoop vs Amazon EMR
CSS3Rendererを使ってiOSでもサクサク3D
D3.jsと学ぶVisualization(可視化)の世界
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
CSSだけで実現するグラフィック表現
これから利用拡大?WebSocket
全部入り!WGPで高速JavaScript+HML5体験
Backbone.js入門
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
three.jsで作る3Dの世界
単なるキャッシュじゃないよ!?infinispanの紹介
Stormの注目の新機能TridentAPI
Spine入門
分散ストリーム処理フレームワーク Apache S4
Twitterのリアルタイム分散処理システム「Storm」入門 demo
Twitterのリアルタイム分散処理システム「Storm」入門
ログ収集フレームワークの新バージョン「FlumeNG」
Hadoop scr第7回 hw2011フィードバック
ななめ45°から見たJavaOne
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 Hadoop vs Amazon EMR

Recently uploaded (7)

PDF
This document is a company profile for Drecom Co., Ltd.
PDF
【株式会社VISIONARY JAPAN】エンジニアチーム採用ピッチ資料_202509.pdf
PDF
ヒートポンプ給湯器―グローバル市場シェアとランキング、全体の売上と需要予測、2025~2031
PDF
サプリメント用ソフトカプセル、グローバルトップ17企業のランキングと市場シェア(更新).pdf
PPTX
その街の今がわかる。ビッグデータから得られた時間帯別推計流動人口統計 あさひる統計プロダクト資料(v202506/2025Q2)
PDF
【会社紹介資料】株式会社カンゲンエージェント[9月1日作成資料公開].pdf
PDF
マルチコアファイバー (MCF)、グローバルトップ7企業のランキングと市場シェア.pdf
This document is a company profile for Drecom Co., Ltd.
【株式会社VISIONARY JAPAN】エンジニアチーム採用ピッチ資料_202509.pdf
ヒートポンプ給湯器―グローバル市場シェアとランキング、全体の売上と需要予測、2025~2031
サプリメント用ソフトカプセル、グローバルトップ17企業のランキングと市場シェア(更新).pdf
その街の今がわかる。ビッグデータから得られた時間帯別推計流動人口統計 あさひる統計プロダクト資料(v202506/2025Q2)
【会社紹介資料】株式会社カンゲンエージェント[9月1日作成資料公開].pdf
マルチコアファイバー (MCF)、グローバルトップ7企業のランキングと市場シェア.pdf

ATN No.2 大阪から来たJavaPuzzlers