2016年8月26日金曜日

リテラルの外部化は、もう、してもしなくても良いようです

用途・目的
ループ処理を行う場合、リテラルを外部化すると処理が高速化できる、という記事を数年前に読んだ当時に自分の環境でもテストした結果、確かに効果があったので、それ以来ずっと外部化していたのですが、同時に「処理系が賢くなれば、リテラル最適化は処理系が勝手にやれる筈…変数を使うやり方は余計な宣言がある分、逆に遅くなってしまうのでは?」とも思っていました。
気にするほどの差ではないことは経験的に分かっていましたが、気になるタチなので確認してみました。

結論としては、現代のブラウザやHTAではリテラルを外部化してもしなくても速度は変わらないようです。

下記ソースのループ1は普通のループ処理で、ループ2は外部化したループ処理です。
ソース
サンプル


chrome52.0.2743.116の結果



ie11.0.9600.18426の結果



htaの結果


配列の要素0番目からlength-1番目までを処理する関数

用途・目的
配列の要素0番目からL-1番目までを処理するループの使用頻度が高いです。
ループをネストする際、添え字を扱う変数の名前でトラブルが起きがちです。

以下の関数を利用すると
・for(var i=0,L=arr.length;i<L;i++){~}という文章をほんの少し短くかけます。
・添え字を扱う変数名の重複を避けられます。

ただし、以下の問題があります。
・break labelができない。(私はほぼ使わないので関係ありませんが。。)

ちなみに、for(var i=0;i<arr.length;i++){~}だとlengthの長さの読み込み回数が増えるため、速度が遅くなります。

2016年8月25日木曜日

WSHやHTAでプログラムを作成する時によく使う定型文

ファイルの入出力やリストの取得などを行う独自関数は利用頻度が高く、かなり使いまわしています。そういう便利で大事なものを、バックアップのためにもまとめてみました。

2016年8月10日水曜日

コメントの行数をカウント

プログラムを作るときは出来るだけシンプルにしよう、と思っています。
行数はシンプルさの簡易的な指標になります。
しかし、分かりやすくするためにコメントを沢山書くと、その分行数が増してしまいますので、行数の増加が「コメントが増えた」ことによるのか「プログラムが長くなった」なのかが分からなくなります。
あくまで簡易的な指標でしかありませんが、コメントとプログラムの行数が修正前後でどのように変化したのか確認したいと思いました。
以下のテキストエリアにプログラムを貼りつけるとコメントなどの行数をカウントします。
コメント行として判定するのは「//」で始まる行に限定していますのでJavaScript専用です。
「/**/」とかは考慮しません。あくまで簡易的なものなので…


2016年8月6日土曜日

ファイルを復元するソフトを比較

SanDiskのSDカードを購入しました。
購入者特典として、有料の復元ソフトが1年間利用できるというライセンスがついていました。
先日作成した埋め尽くす.htaによって抹消したつもりのデータは無料の復元ソフト(Puran File Recovery)では復元できないことを確認済みですが、有料のソフトでも復元できないのか、確認してみました。


2016年8月5日金曜日

ファイルにタグを付けて管理するソフトを改良した

先日公開したtags.wsfを数日間、自分で使いこんでみて、使い勝手を良くするためのアイデアがいくつか浮かんだので、それを反映したものを作成しました。
tags.wsfはドラッグ&ドロップで使うことを基本としていますが、今回作成したものはキーボードでの操作を前提とした設計になっていて、tags.wsfのバージョンUP版という位置づけではないのでtags.wsfのソースは変更していません。


2016年8月3日水曜日

HTAでファイルを選択するウィンドウを開く

昔は(セキュリティの都合で?)出来なかったような気がしますが、今は出来るようです。
確認した環境はWindows7pro SP1 32bit、IE11.0.9600.18376

以下のようなウィンドウをプログラムから任意のタイミングで開けます。

showModalDialogで入力用ウィンドウを表示する

メインウィンドウとは別で小さいウィンドウを表示して、その小さいウィンドウに何か入力するか閉じるかしないとメインウィンドウを操作できない状態にするサンプルを作成しました。