読者です 読者をやめる 読者になる 読者になる

【Java】文字列をequalsで判別する際に注意すること

はじめに

Javaで文字列を比較するときには「=ではなく、equalsメソッドを使用しなきゃだめだよー。」とは言われていますが、
そのほかにも知っておくと良いことを知ったのでまとめます。

定数と変数をメソッドの前後どちらに記載するかで挙動が変わる

「{String1}.equals({String2})」で、

  1. String1に定数をいれ、String2に変数を入れる場合
  2. String1に変数をいれ、String2に定数を入れる場合

で挙動が変わってきます。
以下、それぞれのパターンで何が異なるのかをまとめます。

1. String1に定数をいれ、String2に変数を入れる場合

{String1}の定数に対し、{String2}の変数が同じ文字列であるか否かを判別します。
そのため、{String2}の変数がnullであってもなくても正常に動作します。

2. String1に変数をいれ、String2に定数を入れる場合

一方、{String1}の変数に対し、{Sting2}の定数の文字列が同じであるか否かを判別する場合、
{String1}の変数がnullの時、nullに対して判別処理を実行しようとする
NullPointerExceptionが発生します。

そのため、{String1}の変数のnullチェック処理を行わないと意図せぬ例外が発生していまします。

おわりに

どちらがいいということではなく、

  • 単に文字列を検証するのであれば、後者の方が例外になってくれるので使い易い
  • 上記以外の場合、比較する変数のnullチェックの処理が必要になるため、無駄に処理が増える

かなと、個人的には思っています。
ただ、知らないうちに意図せぬ例外が発生するようなコードを書いてしまうことは避けたいですねー。

サンプルソース

/**
 * 検証用クラス。
 */
public class StringEqualsTest {
    /**
     * メイン。
     * @param args 引数
     */
    public static void main(String[] args) {
        String value = "TEST";
        // String value = null;

        // 定数.equals(変数)の場合
        if ("TEST".equals(value)) {
            System.out.println("同じだよー。");
        }
        // 変数.equals(定数)の場合
        if (value != null) {
            if (value.equals("TEST")) {
                System.out.println("同じだよー。");
            }
        }
    }
}

【Salesforce】Apexの日付操作でハマりがちなこと。

はじめに

ApexやVisualforceで日付の表示や日付操作をする際に、個人的によくハマるポイントがあるので、
備忘を兼ね、下記ポイントを整理したいと思います。
特にSalesforce内部で日付はGMT時刻で値を持っているので、JST時刻にし忘れることはよくあります。。

  • 基本
  • 表示形式 ←今回はここまで
  • フォーマット

表示形式

  1. プロパティを使用する場合、GTM時刻で表示される。
  2. <apex:outputText>を使用する時、JST時刻で表示される。
  3. <apex:outputField>を使用する時、GTM時刻で表示される。

サンプルコード

それぞれのサンプルコードが以下のようになります。
f:id:kmsyn1234:20170228203457p:plain

また、表示結果は以下のようになります。
f:id:kmsyn1234:20170228203745p:plain

おわりに

日付処理はよく使うのですが、意外と忘れがちですねー。
また、日付フォーマットを合わせて使用すると、見た目の表示は大丈夫なのですが、時刻がずれているという、意外と単純な見落としが起こるので要注意です。

【Salesforce】メールメッセージの状況項目をVFで表示する。

はじめに

メールメッセージのステータスをApexで取得し、Visualforceで表示したいので、クエリで値を取得し確認してみると status項目の値が数値で取得されているではありませんか?? f:id:kmsyn1234:20170217202212p:plain

これでは想定したstatus項目の値(送信、ドラフトとか)をVisualforce上に表示することができないため、文字列で表示する方法を調べました。

ステータス項目のマッピングをする

取得したステータス項目の値は数値なので、内部的に文字列とマッピングしているようです。 そのため取得した値によって表示文字列を決めるという、いたってシンプルな対応をすれば良いです。
※なんでこんな仕様なんだろ。。。?

こんな感じなマッピングになります。

数値 状況 日本語訳
0 New 新規
1 Read 既読
2 Replied 返信済み
3 Sent 送信
4 Forwarded 転送
5 Email Drafts and Approvals ドラフト

これで、意図した通りの値をVisualforceで表示することができるようになります。

参考

blog.crmscience.com

転職して約1年が経ちました。

はじめに

約1年前に勤めていた会社を退職して、現職に転職をしたのですが、
今までと環境がまるっきり変わったので、思ったことをとりあえずメモっておく。

バックグラウンド

  • 文系4年目プログラマ
  • 前職は新卒で入った会社でパッケージ開発をしていた地元中小企業。
  • 現職:クラウドインテグレータでいけいけのベンチャー
  • 新たに地方拠点立ち上げるとのことで、立ち上げメンバーとして入社。
  • 基本、本社とリモートで仕事をしている。
  • 同僚は外出が多いので、基本オフィスには私一人しかいない。(人が増えて一人でいることがほとんどなくなりました!笑)

成長したなーと感じたこと

  • リモートワークスキル
    • タスク管理(タスクばらし)をし、想定工数を意識するようになった。
    • 見える化
  • 自己振り返りでKPTサイクルを回すようになった。

しっかりしなきゃなーって感じたこと

  • 忙しくてKPTサイクルが適当になってしまった
  • タスク管理(タスクばらし)の粒度が適当になり、想定工数を十分に考えていない。
  • うまくリモートでコニュニケーションが取れず、アラートあげる・報告の下手。
  • メールとかで、文章力低く(めんどくさがって?)、微妙な認識の違いが生じがち。
  • スピード感がつかめない。

つらかったこと

  • やっぱコミュニケーションし辛い。
    • 仕事を進める上でわからないことはTELとかでも確認することができるが、普段のちょっとした悩み的なことは話せない。
    • でも、こういったことを改善していくことができることも魅力と思えるようになってきた。

ブログを始めました

はじめに

今更ながらブログを始めてみました(遅

ブログを始めるにあたり、ブログを続けるモチベーションや期待していることがないと続けられないと思うので、
ブログを書くことに何を期待しているのかを整理し、自分への意識づけをしていきたいと思います。

ブログを書くことで期待していること

  • 文章力の向上。
  • 文章化することで、自分の知識の整理。
  • 自分のブログを辞書化。
  • 外部公開をすることで、誰かに見られていることを意識する。
  • スターがつくと、ブログを書くモチベーションになりそう。

ここら辺がブログをはじめるモチベーションかなーと考えています。

おわりに

基本的には技術的なことになっていくと思うのですが、
できるだけ使い方だけではなく、なぜこういう風にするのかなど、より低レイヤーな部分に触れていきたいと思います。

よろしくお願いします。