Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Javaあるある

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Javaあるある

Avatar for goshushunsuke

goshushunsuke

April 23, 2019
Tweet

Other Decks in Business

Transcript

  1. 自己紹介 • 名前:江州 俊亮 • 所属:and factory株式会社 • 職種:サーバサイドエンジニア –

    アプリのバックエンド – 社内向けシステムの構築 • RPG:1年 • Java:10年 • Ruby:2年 • Go:5ヶ月(←今ココ!) • 研究とかで触ったもの:R言語,python
  2. まずは言語比較(一部私見) • JAVA,Go,Rubyでよくある比較 JAVA Go Ruby 生産性 △ ◦ ◦

    経験者採用容易性 ◎ × △ 実行速度 ◦ ◎ △ コンパイル速度 × ◎ ◎ 分散処理 △ ◎ ◦ コーディングの統 一容易性 ◎ ◦ △
  3. 実際にjavaを書いてみる package test; public class SampleForLt { /** * @param

    args */ public static void main(String[] args) { int ret =0; for(int i=1;i<9999999;i++){ ret +=("(σ´・∀・`)σ" + i + "乁( •ω•乁)").split("1").length-1; if(i <= ret){ if(i != 1) { System.out.println(ret); break; } } } } } 出力結果:199981 整数nが与えられたとき、0からnの間の全ての数を書くのに必要とされる「1」の数を 返す関数があります。たとえば、『f(16)=9』になります。また、『f(1)=1』に注意。 『f(n)=n』となるような、2番目に大きいnを求めなさい。
  4. 実際にjavaを書いてみる package test; public class SampleForLt { /** * @param

    args */ public static void main(String[] args) { int ret =0; // いくつでヒットするか分からないのでとりあえず大きい数を入れておく。本来なら入力からとれるようにするべきだが今回は簡単の為割愛 for(int i=1;i<9999999;i++){ // 顔文字は無駄です。絶対にやめましょう。 // 例えばi=1の時split(“1”)で分割すると "(σ´・∀・`)σ1乁( •ω•乁)"が"(σ´・∀・`)σ1”と”乁( •ω•乁)”の2つの配列になる // そのlength-1をとればiに含まれる1の数を導ける。 ret +=("(σ´・∀・`)σ" + i + "乁( •ω•乁)").split("1").length-1; if(i <= ret){ if(i != 1) { // 2番目に大きいnを求めよとのことなのでi=1は除去 System.out.println(ret); break; // 2番目に大きいnを求めよとのことなので3番目以降は不要のためbreakして処理を終わらせる。 } } } } } 解説
  5. 実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param

    args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } 出力結果:233168 10未満の自然数のうち、3もしくは5の倍数になっているものは3, 5, 6, 9の4つがあり, これらの合計は 23 になる。同じようにして、1000 未満の 3 か 5 の倍数になってい る数字の合計を求めよ。
  6. 実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param

    args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { // 1から999までループさせて3又は5で割った時の剰余が0の時totalに足しこんでいけば良い。 if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } 解説
  7. 実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param

    args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } package test; import java.util.stream.IntStream; public class SampleForLt2 { /** * @param args */ public static void main(String[] args) { int total = IntStream.range(1, 1000).filter(i -> i % 3 == 0 || i % 5 == 0).sum(); System.out.println(total); } } java8から使えるラムダ式で書くと。。 1ステップで書けちゃう!(゚ロ゚屮)屮 でも慣れないとパッと見何してるか分かりにくいというのはありけり。。 私はjava7が長かったので左のが読みやすくて好きだったりします。
  8. Javaで良く言われてるやつへの所感 ▪学習コストが高くな~い( ,,`・ ω´・)? これは仕方がないのかなと思います。 Javaは、ある程度プログラミングの全体像を理解していないと システム設計がスムーズにできない為知識の幅と深さがより 求められるイメージです。 ▪生産性が低くな~い( ,,`・

    ω´・)? これについてはそうは思いません。確かに記述量は多めですが その分標準機能やIDEでできることが充実しているし、Webでの 情報量はぶっちぎりでNo1なので記述量=生産性とはならない かと思っています。