スキップしてメイン コンテンツに移動

Dartのラクそうなところ The static checker


Eclipse上でAndroidのプログラムをJavaで書いていくのはとってもラクです。何がラクって、間違いをすぐに指摘してくれるところです。一方、XMLを書いているとそこまでラクではないです。何でだろう?もっとEclipse頑張って!と思いがちですが、根は深くてEclipseなどのIDEで何とかできるようなものではないような気がします。

詳細の説明は手に余りますが、Playframework2.0のテンプレートに採用が決まったScalaの良いところをJavaやRubyと比べている記事を紹介しておきます。

Ruby対Scala - tech.cm55.com
http://tech.cm55.com/wiki/scala/ruby
制限が厳格であればあるほど機械的な解析可能性が高まる。プログラマが「この名前とあの名前が同じものであるか」を悩む必要は無くなり、それらをコンピュータに肩代わりさせることができるのである。

Google Developper Day2011のGoogle Apps Script解答例
ところで、Google Developper Day2011のクイズでJavaScriptを書きました。Googleドキュメントで「20都市の日別の供給電力と最大消費電力」が記述されたJSONのデータを取得して個別のシートに展開する問題です。

function myFunction() {
  var url = "http://gdd-2011-quiz-japan.appspot.com/apps_script/data?param=-1488301623206336159";
  var fetchdata = UrlFetchApp.fetch(url);
  var json = Utilities.jsonParse(fetchdata.getContentText());
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  //都市の数だけシートを追加する
  for(s =json.length - 1; 0 <= s ; s--){
    spreadsheet.insertSheet(json[s].city_name);
    // The code below will move the active sheet to the first position
    SpreadsheetApp.getActiveSpreadsheet().moveActiveSheet(1);

    //追加した名前のシートを取得
    var sheet = spreadsheet.getSheetByName(json[s].city_name);
    for (var i=0; i < json[0].data.length; i++){
      //供給電力(capacity)
      sheet.getRange(i+1,1).setValue(json[s].data[i].capacity);
      //消費電力(usage)
      sheet.getRange(i+1,2).setValue(json[s].data[i].usage);
      //電力の消費割合を0.00%の表示形式で設定
      sheet.getRange(i+1,3).setFormulaR1C1('=(R[0]C[-1])/(R[0]C[-2])').setNumberFormat('0.00%');
    }
  }
}

型のチェックが欲しい
JavaScriptでは変数をintで宣言できません。上の、sheet.getRange(i+1,1)というところ、iが0,1,2,,,ではi+1は1,2,3,,,となりますが、このコードを書いている過程では、01,11,21,,,と文字列の連結として認識されてしまいました。Javaに慣れている方がJavaScriptを書き始めると、きっと遭遇する点ではないかと思います。

このときは、01は1、11は11と認識され、21は元データが20都市だったためループを抜けるように認識されました。for文が2回しか回らなく?となってしまいました。変数宣言が厳格でなくても良いのですが、できれば、ここは間違えの可能性を指摘して欲しいところです。

キャストも面倒
一方、Androidのプログラムをしていると真っ先に覚えるのはボタンのキャストだと思います。
Button button = (Button)FindViewById(R.id.button1);でいうところの(Button)です。いちいちキャストの指示をしなくてもわかりそうなものですが、間違えの可能性を指摘してくれるので私はありがたいと思っています。

Dartはいいとこどり
Dartは型をチェックしてくれますが、キャスト(パース?)しなくても実行してくれるようです。(The static checker)
http://www.dartlang.org/articles/optional-types/#static-checker
For example, consider:
String s1 = '9';
String s2 = '1';
...
int n = s1 + s2;
print(n);
This is clearly a problem. The static checker will issue a warning in this case. Note that the code still runs, setting n to '91' and printing 91.
まさに、私がJavaScriptで引っかかった点が解説されています。


後発だけにシンプルで勉強しやすそう
ActionScript3.0での変数宣言で、var i:int = 0;などと型を後から指定するのを見て「他と揃えてよ!」などという人もいますが、後から言語仕様を拡張したのでしょうがないです。
Javaのジェネリックの入ったサンプルコードを幼馴染のSEに見せたら「<>って何?わからん」とか言っていてビックリしたことがありました。
後に『Java The good parts』を読んで後から追加された機能だと知り納得しました。言語仕様の拡張は便利にはなりますがシンプルさがなくなっていくので、勉強するには面倒です。
その点、Dartはサンプルを見た限りとってもシンプルです。

Virtual machineが気になる
Androidのプログラムをしていると少し不思議なところがあります。WebkitなのかWebClientなのか知りませんが、JavaScriptというかHTML5というか期待するほど対応していないようなのです。まるで、Dart活躍の場所が取ってあるかのようです。
もしかして、DartのVMってDalvik VMとバイナリ互換していたりするのでしょうか?そら恐ろしい感じがしてきました。
GWTの二の舞になるのか大化けするのか楽しみです。個人的には、JavaScriptはそこそこにJavaに注力しておこうと思うニュースでした。

リンク
米Google、ウェブプログラミング構造化言語「Dart」を発表
http://internet.watch.impress.co.jp/docs/news/20111011_482895.html

DART STRUCTURED WEB PROGRAMMING
http://www.dartlang.org/

このブログの人気の投稿

Windows 10とデュアルブート環境のUbuntu 16.04 を削除しWindows 10をリカバリー

Windows 10とUbuntu 16をデュアルブートで使っていましたが、Windows 10を起動することは、ほとんどありませんでした。ただ、Ubuntu 16で使っているソフトがChromeとAndroid StudioとInkscapeだったので、Windows 10でも問題ないように思いました。

そこで、Ubuntu 16を削除し、Windows 10をリカバリーすることにしたのですが、起動時にgrubが立ちあがってしまいます。exitで抜けるとUEFIでWindows10の起動を選べますが面倒なのでスッキリさせることにしました。

その他/UEFIブートからLinuxを削除する手順 - Windowsと暮らす
こちらが、とっても詳しく参考になりました。

Windows 10 環境でまず入れたソフト

ChromeJava 8Git for GithubAndroid Studio これから入れたいソフト ATOKGo関連kabuステーション 一太郎2017を買うかATOK 2017 for Windowsを買うか、それが問題です。

X250を英語キーボードに変更したいものの分解が面倒そう

ハードウェア保守マニュアル ThinkPad X250 (PDF)
によるとキーボード交換に際しては、ほとんどの部品を取り外す必要がありそうで、面倒そうです。

日本語キーボードも英語キーボードも使える状態でいたいのですが、’と”と;と:と(と)あたりの打ち間違いが多く、キーボードを見ながらタイプするといういけない状態になりがちです。
日本語変換は半角/全角キーがあたりまえのように動いてUbuntuでも使いやすいのですが、プログラム中は英語キーボードの方が使いやすいです。




ガステーブルとレンジフードと浴室換気乾燥機のリフォームをしました

東京ガスのガス点検で、ガステーブルをそろそろ更新したほうが良いということになり、いろいろと良さそうなガステーブルを物色しておりました。数年前にも探した覚えがありますが、過剰な安全装置のため現状機種の方が使いやすそうということで、買い替えを見送ったのでした。



今回は、「ブフォッ」と一拍遅れて点火するようになり、少し怖いということで更新することになりました。2015年のガステーブルの候補としては、リンナイかノーリツになると思います。上記写真は1995年のステンレストップでなかなか磨きがいがありますが、2015年のモデルではガラストップを選ぶことになります。

おすすめはリンナイのリッセかノーリツのレボア
高価格帯の商品として、リンナイではデリシア、ノーリツではプログレになります。ただ、火力が大きくなったり、省エネになるわけではありません。鍋がないのに点火しているとピーと鳴るとか、操作をしゃべるとか、グリルに設定できる料理パターンが増えるなど付加機能が充実します。

中価格帯の商品として、リンナイではリッセ、ノーリツではレボアになります。おそらく一番売れ筋の商品価格帯です。レンジフードと連動するので、換気を忘れがちな家族にも安心です。火力の調整方法が従来のガスコンロと同じで、左右に回すタイプである点も慣れているので良いです。

低価格帯の商品ですと、ノーリツのファミが候補でした。レンジフード連動と火力調整の方法を気にしなければ一番お買い得な商品だと思います。これらのガステーブルは火力が大大小となってします。しかも、1995年の大は火を小さくすると消えてしまいましたが、2015年の大はトロ火でも消えません。

もっと低価格なガスコンロでは、コンロが大中小となっていたり、トロ火で消えてしまったり、タイマーがなかったりと(今までなかったので良いような気もしますが)工事費は変わらないので割高に感じてしまいます。





レンジフードの20年での進化はガステーブルの比ではない

ガスコンロを取り替えるという話だったのですが、「どうせならレンジフードも」ということになり、調べまくりました。結果、富士工業というメーカーに決めました。リンナイなどのOEM元のようです。パナソニックや東芝にも似たような機種があります。

2015年のレンジフードはシロッコファンが標準です。1995年のファンはプロペラファンでした。…