たかが文字列連結で上司に指摘された話

会社の先輩にレビューで指摘を受けた話。

備忘録として残します。詳しい解説は他サイトに任せます。

VB.NETで文字列連結してみよう

余裕でしょ

業務で以下のようなコードを書いたところ、先輩から指摘を受けました。

Public Class Application
    Public Shared Sub Main()
        Dim person As String = "キャル"
        Dim word As String = "ヤバイわよ!"
        
        System.Console.Write(person + "「" + word + "」" + vbCrLf)    
    End Sub
End Class

vbCrLfは改行コードです。

実行結果

キャル「ヤバイわよ!」

何がヤバイのか

2つの点を指摘されました。

  • 文字列連結にはプラス(+)ではなくアンパサンド(&)を使うこと。
  • 連結が多くなる場合は、StringBuilderを用いること。

文字列連結は+を使うってペコリーヌも言ってたよ

私の尊敬する方の一人にペコリーヌさんという凄腕プログラマーがいます。

ペコリーヌさんは食わず嫌いなので、数多のプログラミング言語を触っています。

ペコリーヌさん曰く、

文字列連結は+を使う言語が多いですね!JavaPythonC++JavaScriptRuby、Go、Scala、F#、...

後半の方はよく知らない言語が多く、聞き流してしまいました。

とりあえず文字列連結はプラス(+)を使っておけばOKだと思っていました。

VB.NETプラス(+)とアンパサンド(&)どちらも文字列連結に使えるから、わざわざ慣れているプラスから変える必要は無いよね?

ヤバイ落とし穴があった

実際のプログラムを見てみましょう。

Public Class Application
    Public Shared Sub Main() 
        Dim a As Integer = 2
        Dim b As String = "4"
       
        System.Console.Write(a + b)
        System.Console.WriteLine("歳、学生です。")
    End Sub
End Class

何も考えず、数値型と文字列型を文字列連結したいことってありますよね?

データの型を意識するのが困難なケースもあると思うので、サクッと書ければ嬉しいものです。

このコードを実行してみると...

6歳、学生です。

...普通だな!

下手すると、この子は学生ではなく児童かもしれません。

なぜか期待した結果と違いますね。

よく見てみると、数値型と文字列型の足し算が行われているようです。

最初はただ文字列連結がしたいだけだったのに...(東京神話)

段々と脱線してきました。プラスからアンパサンドに変えてみましょう。

Public Class Application
    Public Shared Sub Main() 
        Dim a As Integer = 2
        Dim b As String = "4"
       
        System.Console.Write(a & b)
        System.Console.WriteLine("歳、学生です。")
    End Sub
End Class

実行結果

24歳、学生です。

やったぜ。

文字列連結はプラスでもアンパサンドでもどっちでもOKと言っておきながら、Microsoftアンパサンドを推奨しています。

+演算子を使用すると、加算または文字列の連結が行われるかどうかを判断できない場合があります。 &演算子を連結に使用して、あいまいさをなくし、自己記述型のコードを提供します。

+ 演算子 (Visual Basic) | Microsoft Docs

詳しくは上記のサイトでご確認ください。

そんなにヤバくは無い方

2つ目の指摘、StringBuilderは実行時間で優位になるものらしいです。

あとはプログラムの見やすさも向上しますね。

気になる方は、下記のサイトが分かりやすいので見てみてください。

文字列処理を高速に行う - .NET Tips (VB.NET,C#...)

まとめ

公式ドキュメントはちゃんと読もう。

たかが文字列連結。されど文字列連結。。。

あとGoogleで検索して一番上に出てくる、最終的にプログラミング教室に誘うサイトは過信してはいけない。

はてなブログと無限アラート

こんにちは。せいんと(@773_Arihara)です。

今回は、はてなブログについての子ネタです。

技術者しか興味が湧かなそう話題ですが、後半には皆さんに是非知って欲しい話題に触れます。

はてなブログは最高だぜ!

そんなに記事書いてないクセに何を言ってるんだという感じですが、この記事で最高な点を確認したいだけです。ごめんなさい。

シンタックスハイライトだと...!?

C

#include <stdio.h>
int main(void){
    char *str = "Hello, World!";
    //文字列表示
    printf("%s¥n", str); 
}

VB

Sub Main()
    Dim str As String = "Hello,World!"
    'ダイアログ表示
    MessegeBox.Show(str) 
End Sub

古臭い言語なのはさておき、コードに勝手に色が付きます。

アウトプットに結構便利そうですよね。

Markdown記法が使えるだと...!?

f:id:Arihara:20190820230649p:plain
VSCodeでのMarkdownの編集画面

実はこの記事はプログラムを書くのに使うVisual Studio Codeというソフトで書いていたりします。

それは、はてなブログMarkdownというマークアップ言語に対応しているからです。

見出しや字のスタイルの設定、表の作成なんかが楽に出来ます。

githubでアプリケーションをダウンロードする時に、readme.mdという形式のファイルを目にする事が多いと思いますが、アレもMarkdownで書かれたものです。

あと数式も入力できます。理系ホイホイですね。

元コード(TeX)

\boldsymbol{F}\_{ped\_i}=
\frac{Q\_{ped}}{\|\boldsymbol{f}\_{ped\_i}\|^2}\cdot
\frac{\boldsymbol{f}\_{ped\_i}}{ \| \boldsymbol{f}\_{ped\_i} \|} 
\cdot \cos \theta\_{ped\_i}

出力結果


\boldsymbol{F}_{ped_i}=
\frac{Q_{ped}}{|\boldsymbol{f}_{ped_i}|^2}\cdot
\frac{\boldsymbol{f}_{ped_i}}{ | \boldsymbol{f}_{ped_i} |}
\cdot \cos \theta_{ped_i}

上式は私の卒論で出てきた式です。

JavaScriptが貼れるだと...!?

これは割と貼れるサイトが多いかもしれませんが、気にしないでおきます。

ということで、ひとつスクリプトを貼ってみます。

無限アラート事件って知ってる?

無限アラート事件(むげんアラートじけん)は、電子掲示板に不正プログラムを書き込んだとして5人が摘発された事件である。

無限アラート事件 - Wikipedia

いたずらごころ掲示板にURLを貼ったJCが警察に捕まっちゃった事件ですね。

私も子供時代にこういうイタズラしてたような気もしますが...

アラートというのは、ブラウザで最前面に表示されるメッセージの事です。

例えば、何かしらのサイトの会員登録をする時に電話番号が未入力だったりすると、『必須項目が未入力です。』などのアラートが表示されるケースが挙げられます。

無限アラートというのは、閉じても閉じてもアラートが出てくる嫌がらせのようなもので、電子機器を破壊するような類いのプログラム(=ウイルス)ではありません

というのが個人的な見解。

一方検察側は、こう述べているそうです。

ウイルス罪を成立させる要件の1つ『人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録』の『意図に反する』の部分に抵触する。

どんなプログラムでも意図しない動作なんて幾らでもありますが...

プログラマーの間では、この件は結構物議を醸しています。

とりあえず利用者に意図させれば、無限アラートのプログラムを貼っても逮捕はされなさそうです(多分)。

実際のプログラムは?

こんな感じです。

    function onButtonClick() {
        for(;;){
            alert(" ∧_∧ ババババ\n( ・ω・)=つ≡つ\n(っ ≡つ=つ\n`/  )\n(ノΠU\n何回閉じても無駄ですよ~ww\nm9(^Д^)プギャー!!")
        }
    }

for文という繰り返しを制御する関数の中で、アラートを表示させるように書かれています。

本来for文はそのループを抜ける為の条件を指定するのですが、このプログラムでは省略されている為、無限にアラートが出る訳ですね。

この記事の最下部のボタンをクリックすると、この無限アラートのプログラムが実行されます

抜け出すには、タブを閉じればOKです。それでもダメならブラウザを落とす必要があります。

クリックして電子機器が壊れてしまった方は、せいんと(@773_Arihara)までご連絡ください。

そうなった場合は逮捕されちゃいますね...

Macの環境構築をしました

MacBook Airを購入して取り敢えずの環境構築をしたので、備忘録として残しておきます。

基本設定

ファイアウォール

トラックパッド

キーボード

  • システム環境設定>キーボード>キーボード
    • キーのリピートを最速に設定。デフォルトは遅すぎる。
    • F1,F2などのキーを標準のファンクションキーとして使用にチェック
      • デフォルトは音量調節などキーに印字された機能の制御
      • fnキーと同時押しで機能の切り替えが出来ます。
  • システム環境設定>キーボード>ユーザ辞書
    • 英字入力中にスペルを自動変換のチェックを外す
    • 文頭を自動的に大文字にするのチェックを外す
      • プログラム書く人なら言わずもがな。
      • ユーザ辞書が勝手にiPhoneと同期されてました。すごい。
  • システム環境設定>キーボード>入力ソース>日本語>候補表示
    • フォントをヒラギノ角ゴシックW3に変更。
      • デフォルトは明朝体でちょっとダサい。

インストールしたアプリ

いつもの

  • TweetDeck
    • TLがいっぱい見れるアプリ。裏垢だらけのJKも安心して使えます。
  • GoogleChrome
    • なんとなく。Macとの操作性の相性が悪く、通知受け取る専用になってます。
  • Chromeリモートデスクトップ
    • Windowsをリモートで動かしたい時が来るかもしれない。
    • かな変換キーの配置が違うので、色々設定しないと面倒
    • そもそもWindows側に英語キーボードとして認識されていて、キーが合わない
  • LINE
    • MacならiPhoneで見慣れた絵文字も入力出来るのでいい感じ🤔
  • Kindle
    • Amazonで買った電子書籍を読みたかったのですが、はっきり言って使い物になりません。操作性が悪すぎます。
    • 対してAppleBooksはいい感じです。
  • DMMGamePlayer

プログラミング系

  • Visual Studio Code
    • この記事書くのに絶賛使ってます。
  • JDK
  • XCode & CommandLineTool
  • Homebrew
  • zsh

    • bashの高機能版
    • はっきり言って全部を使いこなせないと思う
    • macもいずれデフォルトシェルがzshに変更されるらしい。
    • 便利機能として、タブを押すと下に候補一覧が出てきます。
      f:id:Arihara:20190821222648g:plain
      zshの補完機能
  • iTerm2

    • Terminal.Appの代替
    • ブラウザでコード見ながら写経が出来るので便利
    • commandキー2回叩くとターミナル画面を表示するように設定しています。
      f:id:Arihara:20190821230148g:plain
      iTerm2の画面上にターミナル画面を表示する機能

おわりに

環境は日々模索してます。

webブラウザですらどれを使おうか未だに悩んでいるくらいですから、いっぱい触って自分色に染めたいですね。

Macbook Air(2019)を買った話

こんにちは。せいんと(@773_Arihara)です。

アウトプットの場としてブログを始めます。よろしくお願いします。

Twitterでも呟きましたが、MacBook Airを購入したので、備忘録として残しておきます。

MacBook Air(2019)を買いました

2019年7月に発売された、Macbook Airの最新モデルを購入しました。

カラーはTweetの画像にもある通り、スペースグレイにしました。

MacBookといえばシルバーの印象が強いと思いますが、スペースグレイの格好良さに惹かれました。

ストレージは256GBを選択しています。

なんで買ったの?

衝動買いです。家電量販店に触りに行った次の日には札束スマホ握りしめて買いに行ってました。

後述しますが、今回は現金ではなくスマホ決済で購入しました。

購入の決め手となった大きな要因として挙げられるのが、トラックパッドの素晴らしさです。

Macユーザーでマウスを使っている人がほとんど居ない理由はコレです。

基本的にノートPCでは仮想デスクトップでの運用は必要不可欠だと思っていますが、Macではそのデスクトップの切り替えが3本指のスクロールでスムーズに行えます。

Windowsノートでも4本指のスクロールで切り替えられますが、指が窮屈だし、そもそも反応が悪いです。

後は細々とした理由を以下に挙げておきます。

  • 前のモデルより価格が下がった
2019 2018
128GB ¥119,800 ¥134,800
256GB ¥139,800 ¥156,800

上記は税抜価格です。

  • プログラミングのモチベーション向上に繋げたい
  • スタバでドヤりたい
    • Mac買ったらまずはコレ

PayPayで買ってみた

学生の頃に、iPad mini4の最上位である128GBモデルを購入した時は、銀行で下ろしたばかりの札束を握りしめてお店に行ったのに、今は良い時代になりましたね。

PayPayの還元率は、全盛期では20%という異常な数値でしたが、現在は3%に落ち着いています。

3%でも割とお得だと思うのですが、最近ではd払いがアツいので、下火になっている気がします。

今回はそのPayPayで支払った訳ですが、実質的な金額は以下のようになります。

¥150,973(定価) - ¥4,529(PayPay3%還元) - ¥7,548(コジマポイント5%)

=¥138,896(税込)

ちなみに価格.com最安値はこちら

¥129,307(税込)!?!?!?!?!?!?

負けました。

ただ、Amazonよりは安いようですね。

家電量販店は在庫さえあればすぐに手に入るので、オススメですよ。

実際使ってみてどうなの?

トラックパッドは評判通り良い

画面スクロールや拡大縮小はまるでスマートフォンのように操作できます。

また、やはり仮想デスクトップ機能はかなり良く使いますね。この記事の執筆中もストレスなく操作できて快適です。

フォントが綺麗

流石はAppleといった感じです。

ディスプレイの解像度も相まって最高ですね。

全体的に慣れが必要

Windowsとの大きな違いはキーボードです。

CtrlやAltの代わりにOptionCommandキーが採用されています。

また、日本語とアルファベットの切り替えのキーも異なります。

この辺りは慣れないうちはちょっと大変かなと思います。

たまに重い

MacBook AirのCPUはIntelCore i5を搭載していますが、極低消費電力ノート向けのプロセッサであるため、性能は良くないです。2コアだし。

元々はCore Mプロセッサと呼んでいた低消費電力CPUがCore iシリーズに仲間入りした訳ですね。わかりづらい。

話が脱線しましたが、性能が原因でたまに文字入力に時間がかかるなど、動作が重くなることがあります。

これは仮想デスクトップ機能が快適すぎて、無駄にアプリを開きすぎていることが原因な気がします。嬉しい悲鳴ですね。

通常に使う分にはさほど問題は無いと思います。

プリコネができない

Cygames様、DMM様、Macでもプリコネがやりたいのでどうか宜しくお願い致します。

まとめ

Macはいいぞ。

みんな買ってください。

次回は環境構築について書きたいと思います。

Mac先駆者さまには色々とオススメの環境を教えていただければ幸いです。