HackerQuest

No app, no life

趣味と実益を兼ねてプログラマをやっている者👨‍💻

AOPについてのメモ

AOPとは?

Aspect Oriented Programming = アスペクト指向プログラミング

クラスの持つ責務に基づいて、クラス内に本質的な処理だけを記述するために利用する技術です。

本質的な処理以外の、複数のクラスにまたがって記述される処理を横断的(Aspect)関心事と呼びます。

横断的関心事 = 共通処理という考え方でおk

主な横断的関心事は

AOPを導入することによって、本質的な処理と横断的関心ごとを分離して、共通で利用するためのソースコードを記述することができるため、誤った処理を減らし、可読性の良いソースコードにすることができます。

オブジェクト指向では、うまく分離できない横断的関心事を補助機能として利用されるプログラミングパラダイムです。

つまりどうゆうこと?

AOPを使うことによって、

元のソースコードには一切手をくわえずに、 新たな共通処理を追加することができるようになります。

なんとなくJSON

~ お品書き ~

  • JSONってなんぞや?
  • どんな構造
  • JSON の書き方
  • よくある間違い(T T)

  • 扱える値

  • 締め

JSONってなんぞや?

JavaScript Object Notationの略!

Google先生に翻訳してもらうと

JavaScriptオブジェクト表記という意味らしいです。

13日の金曜日に来る人とは違うようです。良かったですね。

JSONの紹介によると

https://www.json.org/json-ja.html

軽量のデータ交換フォーマットです。

人間にとって読み書きが容易で、マシンにとって簡単にパースや生成を行える形式です。

JavaScriptプログラミング言語(ECMA-262標準第3版 1999年12月)の一部をベースに作られています。

JSONWebサービスなどでよく使われています。テキストベースなので様々なプログラミング言語から簡単に扱えるので便利ですね〜

自分もC#でUnityでアプリ開発をしている時に、テキストベースで保存できるUnityのPlayerprefsという機能でJSON形式にしてよく理解しないまま利用していました。

他のデータ形式であるXMLに比べてシンプルで読みやすいです!!!ガチで!

データサイズも小さいよ!

JSONの構造

JSONには二つの構造を基にして記述されます。

  1. 名前 : 値のペア
  2. 値の順序付きリスト

名前 : 値のペアはキーとバリューのように扱われています。

また値の順序付きリストは配列として扱われます。

文字コードUTF-8

JOSNの書き方

{ } この中括弧の中に、ダブルクォーテーション( " " )で囲んだ変数名と値をコロン( : ) で区切って記述します。

{ "name" : "MARIO" }

複数用意したい場合はカンマ( , )で連結します。

{ "name" : "MARIO" , "age" : 26 }

配列を使いたい場合は[ ]を利用します。

{ 
    "name" : "MARIO" , "age" : 26,
    "friends" : ["Luigi", "Kinopio"]
    }

簡単ですね!

よくある間違い(T T)

  • 変数名をダブルクォーテーションで囲っていない
  • ダブルクォーテーションじゃなくてシングルクォーテーション使ってしまう

扱える値

  • 文字列
    • ダブルクォーテーションで囲ったもの
  • 数値
  • null
    • 値が空のも(全て小文字)
  • true , false
    • 論理値(全て小文字)
  • オブジェクト
    • { } 中括弧で囲んだもの
  • 配列

締め

今回は、なんとなくJSONについて触れました。

しかしJSONスキーマとか、いろいろ難しそうなものもありそうで、

JSONの沼は深そうです。

【Java】Integer a = 10, b =10; a == b は true or false ?

f:id:tsudukihashi0817:20190416212354p:plain

問題 1

public class Main {
    public static void main(String[] args) {
        Integer a = 10;
        Integer b = 10;
        System.out.println(a == b);
    }
}

出力結果は true or false どちらだと思いますか?

正解は...

true

解説は次の問題の後で!

問題 2

public class Main {
    public static void main(String[] args) {
        Integer a = 1000;
        Integer b = 1000;
        System.out.println(a == b);
    }
}

出力結果は true or false どちらだと思いますか?

正解は...

false

全問正解できましたか?

正解できた方は、JVMの気持ちを理解していて素晴らしいと思います。
自分は間違えました。

解説もどき

JVMはメモリを節約しようと、常日頃から努力しています。

Integerの小さい値がよく使われていることを発見しました。

ある程度の数字なら自分たちであらかじめ用意しておいて、いくつもメモリを使用させないようにしようとしました。

ある程度と言うのは、1バイト(8bit)までです。

-127から127までの数字はJVM内部で保持されています。

そのため

public class Main {
    public static void main(String[] args) {
        Integer a = -127;
        Integer b = -127;
        System.out.println(a == b);
    }
}

true

です。

と言うことは

public class Main {
    public static void main(String[] args) {
        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);
    }
}

false

になります。

1000は8bit以上なのでfalseと言うことになります。

まとめ

  • JVMは8bitまでの数字を内部に保持している

  • JVMの気持ちを理解してあげよう




Ryo Tsuzukihashi