hakeの日記

Windows環境でプログラミングの勉強をしています。

2015-01-01から1年間の記事一覧

Go言語 - WALKでGUI - ComboBox

ComboBox(プルダウンメニュー)の使用例。 ComboBoxは状態を保持するので、MyMainWindow構造体に変数を追加し、実体としてアサインします。 Modelフィールドで表示する項目を、CurrentIndexフィールドで初期値を設定しています。 選択項目を変更すると、OnC…

Go言語 - 省略書式の変数宣言とスコープで悩んだ点(Go1.5)

以下のプログラムでは、forブロックの中で関数hogeの戻り値を取得しています。 このとき変数 err が初めて登場したため ' = ' ではなく ' := ' を使用したのですが、こうすると変数aもforブロック内のローカル変数と判断されてしまいます。このため、ループ…

Go言語 - WALKでGUI - 部品を並べる

とりあえずPushButtonを並べてみる。 縦に並べる MainWindowのLayoutフィールドにVBoxを指定して、Childrenフィールドの[]Widgetに部品を入れていく。 ちなみにLayoutをHBoxにすると横に並びます。 package main import ( "github.com/lxn/walk" . "github.c…

Go言語 - エラー時の戻り値

Go言語にはerror型インターフェースが定義されているので、これに適合するエラー用構造体を作成して、エラー時にはこの構造体をerror型として返す。 正常終了時には、nil リテラルを返すようにする。 package main import ( "fmt" ) /* Goで定義されているer…

Go言語 - WALKでGUI - 何もないウィンドウ

ネット上に(日本語の)情報がほとんど無いのでドキュメントを見ながら勉強。 環境は、Windows8.1(32bit)上のGo言語1.5+WALKライブラリです。 ドキュメントは、GoDocServerを起動した状態で、 http://localhost:6060/pkg/github.com/lxn/walk/を参照。walk直…

Go言語 - 複数ファイルのコンパイル

同packageの場合 他ファイル中の小文字で始まる関数や変数も参照可能。 同じフォルダに置きソースファイル名を指定しないでコンパイルする。実行ファイル名はフォルダ名になる。 \add\main.go \add.go main.go package main import ( "fmt" ) func main() { …

Go言語 - 正規表現

日本語も一文字として認識してくれるみたい。 でも、文字の位置を返すメソッドはバイトスライスの位置なのでで注意。 package main import ( "fmt" "regexp" ) func main() { s := "aあbいcうdえeおf" // 正規表現にマッチするかの有無 fmt.Println(regexp.M…

Go言語 - ソート

sortパッケージで、int,float64,stringのスライスについての小さい順のソートが可能。 逆順が欲しい場合は予め定義されているスライス型(intならIntSlice)にしてからsort.Sort(sort.Reverse(x))とする必要がある。でも、普通にソートして並べ替えた方が単…

Go言語 - 日本語文字列の操作

stringはバイト列なので、日本語文字列をインデックス指定で取り出しても文字単位の指定とはならない。文字単位で指定する場合には一旦runeのスライスに変換すると、インデックスが文字単位と一致する。 また、rangeを使用したforの中でも文字単位(rune)で…

Go言語 - マップ

rubyでいうところのハッシュ。 for rangeで取り出す場合は、キーのみと、キー&値のペアの取り出しができる。 キーを指定して値を読みだす場合、そのキーに対応する値が無い場合は二番目の戻り値がfalseになり、値(最初の戻り値)はゼロ値になる。 package …

Go言語 - 関数を引数にする関数

関数MyMapIntの第一引数は、一つのintを引数にして、intを返す関数。 package main import ( "fmt" ) func MyMapInt(fn func(int) int, sl []int) (ret []int) { ret = make([]int, 0, len(sl)) for _, n := range sl { ret = append(ret, fn(n)) } return }…

Go言語 - 埋め込みによる構造体の継承

構造体Fooを構造体Barに埋め込む(フィールド名をつけないメンバとする)ことで、継承の様なことができる。 package main import "fmt" type Foo struct { name string } func(f *Foo)hello() { fmt.Println("Hello", f.name) } type Bar struct{ Foo } func…

Go言語 - スライス

Go言語では一旦作成された配列の要素数は変更できない。スライスは配列への参照だけれども要素数の変更は可能。スライスに要素が追加されて、配列のキャパシティを超えた場合には、より大きなキャパシティを持った配列と、そのスライスが作成されて要素の値…

Go言語 - 構造体とメソッド

Go言語1.5が公開されたので入替。 構造体とメソッド使用方法の勉強。 注意点として、ポインタ経由で参照渡しされた構造体のフィールドへのアクセス時に *p.hoge のようにアスタリスクをつけるとエラーになる。 package main import "fmt" type Test struct{ …

Go言語 - インターフェース

インターフェースの使用方法の勉強。 いまひとつ理解できていないような気がしますが…… あるインターフェース型で宣言した変数や関数の仮引数は、そのインターフェース型で定義したメソッドを持つデータ型のみ代入可能ということで良いのかな? あるインター…

Go言語 - Shift_JISファイルの読み書き

Windowsでの使用ではSJISのテキストを扱うことが多くなります。SJISファイルの読み書きには以下のパッケージを使用します。 参考サイト ・Go で euc-jp や sjis の csv ファイルを読み込むには変換用のリーダーを1つかませるだけでよかった 入手先 ・https:/…

Go言語でGUIプログラム on Windows

VisualuRubyが使用できなくなってから、exeファイル単体で動作して、かつ、ファイルサイズが巨大にならないGUIアプリ制作環境を探していましたが、Go言語+WALKライブラリがなかなか良さげなのでメモ。 後述のhello.exeの実行ファイルのサイズは5MB弱で、Wind…

iTunesを新PCへ移動(Windows Vista→Windows8.1)

新型iPod Touchの購入検討しようとしていたら、iTunesがWindows Vistaに対応しなくなった様なので、Windows8.1に移行した。せめてWindows10のPC買い換えまで持って欲しかった。近々にWindows10 PCへ再移行予定なのでメモ。 基本的にフォルダのコピーだけなの…

javascript ノードの動的操作

SELECTタグにスクリプトで子ノードとしてOPTIONタグ要素を追加して、その属性値を表示する。 追加する要素は、createElement()で作成し、appendChild()で追加、removeChiled()で削除する。 全ての子ノードの確認は、firstChild()とnextSibling()をfor文(あ…

javascript 何をfalseと判定するか

if文などの条件に渡されたときにfalseと判定されるもの。 <html lang='ja'> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <title>false判定</title> <script type="text/javascript"> function print(str){ var s = str + '<br>'; document.getElementById('result').innerHTML += s; } functio…</meta></head></html>

javascript Windows環境でのローカルPCのフォルダアクセス

fso.GetFolder()でFolderオブジェクトを取得して、そのプロパティにて各種情報にアクセスする。filesプロパティではサブフォルダの要素が取得できないことに注意、SubFoldersプロパティを使用する。 <html lang='ja'> <head> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> <title>ローカルフォルダ内のファイルリスト表示(IEのみ)</title> <script type="text/javascript"> </meta></head></html>…

javascript 正規表現

文字列が正規表現とマッチするかの判断には、RegExp.test()を使用し、置換はString.replace()を使用する。 正規表現とマッチした文字列の取得は、String.match()かRegExp.exec()を使用する。正規表現にgオプションを使用していない場合、両者とも最初にマッ…

javascript 子ウィンドウとのデータのやりとり

子ウィンドウとデータのやり取りを行う方法2つ。 showModal(Modeless)Dialogを使用する方法(IEのみで動作?) 親→子:showModalDialogの第二引数を使用する。 子→親:変数returnValueを使用する。 子ウィンドウを右上×で閉じた場合にはreturnValueはundefi…

javascript イベントハンドラの動的な追加と削除

関数名の記述について、add(remove)EventListenerの引数では括弧()があると上手く動作しない。また、buttonタグのonlick属性では括弧()が無いとダメ。クォートで囲む場合は括弧()が必要ということ? add(remove)EventListenerの第3引数はとりあえずfalseにし…

javascript Windows環境でローカルPCからテキストファイルの読み込み

一括で読み込む場合と一行ずつ読み込む場合を記載。 <html lang='ja'> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> <script type="text/javascript"> var file; // http://msdn.microsoft.com/ja-jp/library/cc428044.aspx // OpenTextFile メソッド var forReading, forWriting, forAppending va…</meta></head></html>

javascript Windows環境でローカルPCへのテキストファイルの作成保存

htmlでもhtaでも動作する。 ActiveXを使用するのでhtmlをIEで実行させた場合には、実行時に警告がでる。また、OpenTextFile メソッドの引数の定義を定数(const)にしたところhtaで動作しなかったので変数としました。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> <script type="text/javascript"> var file; // http://msdn.microsof</meta></head></html>…

javascript 部品の配置

style属性、またはstylesheetで、position:absolute, top, left(right), width, heightを設定すると好きな位置に配置できる。 calc.html <html lang='ja'> <head> <meta http-equiv='content-type' content='text/html; charset=Shift_JIS'> <link rel='stylesheet' type='text/css' href='./calc.css'> <title>簡易電卓</title> </link></meta></head></html>