前の10件 | -

Xcode playground とターミナル swiftとの連携 [Xcode]

 xcrunについて、Yosemite Beta Xcode Beta5 で試している内、前に書いたxcrunの記事が古くなって直さないといけないことに気付いて直したのですが、そのことで気付いたことについて少々。swiftコマンドでplaygroundと同じことを試せるので、やってみると表示の方法が若干違っていることでした。Xcodeのドキュメントではターミナルでの操作は載っていないので、多分誰も関心を寄せていないとは思いますけれども、Xcodeだけではなかなか気付かないことがターミナルからだと見えるものがあります。サンプルで試すと、

var フルーツ = ["バナナ", "アップル", "サクランボ"] // ["バナナ", "アップル", "サクランボ"]

フルーツ                                                      // ["バナナ", "アップル", "サクランボ"]

println(String)                     // Console Output (Metatype)

println(フルーツ)                     // Console Output [バナナ, アップル, サクランボ]

フルーツ.append("オレンジ")                                                      

println(フルーツ)                 // Console Output [バナナ, アップル, サクランボ, オレンジ]

println(Int)                     // Console Output (Metatype)

フルーツ.removeLast()             // "オレンジ"

フルーツ                                              //  ["バナナ", "アップル", "サクランボ"]

ターミナルからだと:$ swift

1> var フルーツ = ["バナナ", "アップル", "サクランボ"]

フルーツ: [String] = 3 values {

  [0] = "バナナ"

  [1] = "アップル"

  [2] = "サクランボ"

}

  2> フルーツ

$R0: [String] = 3 values {

  [0] = "バナナ"

  [1] = "アップル"

  [2] = "サクランボ"

}

 フルーツーツ 

  4. 

$R1: [String] = 3 values {

  [0] = "バナナ"

  [1] = "アップル"

  [2] = "サクランボ"

}

  4> println([String])

(Metatype)

  5> println([$R1])

[[バナナ, アップル, サクランボ]]

  6> println([$R0])

[[バナナ, アップル, サクランボ]]

  7> println($R0)

[バナナ, アップル, サクランボ]

  8> println($R1)

[バナナ, アップル, サクランボ]

 9> var fruit = ["banana", "apple", "cherry"]

fruit: [String] = 3 values {

  [0] = "banana"

  [1] = "apple"

  [2] = "cherry"

}

 10> fruit.append("orange")

 11> fruit

$R2: [String] = 4 values {

  [0] = "banana"

  [1] = "apple"

  [2] = "cherry"

  [3] = "orange"

}

12> fruit.removeLast()

$R3: String = "orange"

 13> println(fruit)

[banana, apple, cherry]

 14> fruit

$R4: [String] = 3 values {

  [0] = "banana"

  [1] = "apple"

  [2] = "cherry"

}


て具合なのですが、途中日本語入力が厄介になったので、英語に変えました。見ての通りターミナルだとplaygroundで表示していなかった分も見れます。また、println($R0)とかでその格納されているデータも見れます。内側では結構何かとやっているんですねえ。で、日本語入力にはまだ問題があり、これからの課題なんでしょうけれども、解決していなかったことによって、シフトビットとは何なのか、どういう状態になるのかを逆に見ることができました。開発者にとっては、面白い体感現象です。


それと、rubyやpythonと違って最初タイプを指定しなければなりませんが、それさえやっておけば、オブジェクトだけで表示してくれます。逆にこんがらがるところでもありますが、開発スピードやそれによる混乱は無視するとして、どの道この言語を理解できないのであれば、プログラムのドツボに嵌ってしまいます。つまり、演算子の持って行きようなのだと私は思っています。ここでは、ヘルプドキュメントにはない数値ではなくストリングに文字列を挿入するにはどうすればいいんだろうと思ってやってみたものです。簡単でした。アプリケーション開発をする人には全然物足りないでしょけれども、転ばぬ先のステップということで、参考まででした。


Apple swift言語の慣れない構文、関数に躓く [Xcode]

 面白くなって来たので、時間を見つけて飽きない程度に Xcode の playground を試しているのですが、次のファンクションで躓いてしまったので、一言。原文はこうなっていたのですが:

  • func calculateStatistics(scores: [Int]) -> (minInt , maxInt, sumInt) {
  •     var min = scores[0]
  •     var max = scores[0]
  •     var sum = 0
  •    
  •     for score in scores {
  •         if score > max {
  •             max = score
  •         } else if score < min {
  •             min = score
  •         }
  •         sum += score
  •     }
  •    
  •     return (min, max, sum)
  • }
  • let statistics = calculateStatistics([5, 3, 100, 3, 9])
  • statistics.sum
  • statistics.2

乙張りをつけるために日本語に一部直し、println() を追加しました。:

import Cocoa

func calculateStatistics(scores: [Int]) -> (最小値: Int, 最大値: Int, 合計: Int) {

    var 最小値 = scores[0]

    var 最大値 = scores[0]

    var 合計 = 0

 

    for スコア in scores {

        if スコア > 最大値 {

            最大値 = スコア

        } else if スコア < 最小値 {

            最小値 = スコア

        }

        合計 += スコア

        println(合計)

    }

    return (最小値, 最大値, 合計)

}

let statistics = calculateStatistics([5, 3, 100, 3, 9])

statistics.合計

statistics.2

println(statistics)


これ、別段解説らしい解説は無いので、自分なりに理解するしか無いのですが、原文をぱっと見た限り何をしているのか、解りませんでした。図ではこうです。:iosSwiftForIn構文2.png関数自体は、22ラインの値を設定する迄関数自体は空のままです。しかもこの設定値()の中に配列で指定しています。可能なんですねえ。この値を順番に足した値が合計になるわけですが、その方法が今迄見た構文シンタックスとはまるで違うわけです。スコア自体は、for … in …で初めて出て来るわけですが、これが最初にどの値が代入されていくのか解り辛い訳です。最小値?scores?最大値?で、Xcodeでは答えが有る程度右に表示されるので助かるのですが、それでも、まだ解りません。答えは(5 times)なのですが配列の中にも5はあります。この5でしょうか。しかし、最小値 = スコアで3と表示しているので違うようです。で、配列の中の5はscores[0]で5とあるので、この値に使用されています。?まさかと思ったのですが、カウンタに使用される5は初期値が0で5回インクリメントされる迄++されると考えると、この配列に値を与えた時に、自動で出来る5個の数値の配列の番号の数しか有りません。ここが混がらがる所です。このcalculateStatistics([])では表示では三つの値しか表示していないからです。そこで println(合計) を入れてみた訳です。Console Output は5,8,108,111,120 と繰り返すたび次の数を足していますから、この5個の数がカウンタになっていて、そのそれぞれの数を足していっています。で、++の役目をしているのが += ということになります。確かめる方法は他にも有りますが、ええ?これって、複雑、それとも単純、慣れない表現のせいかこのアイディアはそう簡単には浮かんできません。これをC++で書くとどうなるんだろうと思うと、頭が痛くなってきます。今迄は考えるのがいやで、他人任せで人が考えたものをただ使わせてもらっていたのですが、いい加減本腰を入れてがんばろうと思うと、この有様です。まあ、少し頭を冷やしますか。


xcode playgroundでの配列のアドレス [Xcode]

 新しく出来た Xcode playground を使って遊んでいるのですが、簡単な事でも今迄 C では煩わしくて確かめる事が出来なかった事も、playground では確かめる事が出来ます。関数のオーバーライドは、C では C++ を使わないと旨くいきませんが、swift では煩わしさが有りません。var let で定義した変数は、同じファイル内で、2回定義し直すことは禁じられているのでエラーになるのですが、型を指定しない形で、つまり main 関数内で呼び出すように使って、変数の値を変えられる事をサンプルが示してくれています。それを、println( )で明示的に示しました。Console Output は絶えず変更が合った場合、表示してくれていますから、下の段に分かり易く表示するよう表示位置を変えました。その図:配列のアドレス3.png


で、次から思いつきで、単に新たな [3] と言う配列を作ったのですが、これも0から3まで表示させておきます。初期値が3ですから、最初の値が3なのは解ります。で、次は別段セットしていないので、0が三つ並ぶのかと思いきや、この三つの値がコード(ファイルの中身)の何処かに追加削除する度変化します。これが、今迄は気付きませんでした。で、何を表示しているのかと見ると10進数のアドレスのようですが、この二番目が何なのか?最初は0なのですが、たまに変化します。今回は2です。2?は何を表しているのでしょうか、多分あり得る数値をコンパイラーが自動で当てはめているのでしょうから、こちらサイドから見れば予期しない値です。推論で後二つ表示しますと言う意味だと思いますので、範囲を0から2に変えます。変えると今度は全然違った数値になりました。3番目は、マイナスの大きな数値です。何かの開始番地のようですがこんなことで、なぜ変わるのか解りません。では、0から1では、今度は0です。?と言うことは、2番目の値は3番目と4番目の補数のアドレスの値が有るかどうか判定しているのでしょうか。?でもないようです。0…5とかするともう解りません。ですが、今迄コードのこのステップを見るには一旦保存して編集を終わらせてデバッガーを起動するしか方法が無かったわけで、これでは編集と同時にデバックする事は出来ないので見る事が出来ない事象でした。つまりこれは新次元のIDEです。まだ他メーカーにはありません。


基本中の基本ですが、実際試してみないと解らない理解不十分だった事も見えてきます。で、これはこれとして話は変わるのですが、この文法に近い言語として、web開発の go言語があります。Linuxで使われている swift自体もそうらしいですが、知らなかったので今回はパスしますが、go言語ではこのような確認の方法が有りません。で調べると gccgo と言うコンパイラーがあるらしいのですが、linux で確かめるとコンパイルはできるものの、実行ファイルを表示する事が出来ません。なんか可笑しいし、本家のホームページには何も明示していないので、多分頓挫しているプロジェクトなのだろうと判断しました。go言語は sublime-text3で認識出来るようになったみたいですけど、 Linux で試すと思わぬバグに遭遇したりして、Linux ではまだOS次第でダメな部分も有るようです。それに比べると、Xcode6 は安定しています。web開発までは先が長いのでしょうけれど、有る程度先が見えます。Appleの独壇場ですが、それで良いんだろうと思います。安定したWebの世界を作るにはとにかくそのビジョンが見えてこない事にはどうしようも有りません。他には、nodejs , python, rubyとかありますが、安定しません。なので cloud にはあまり関心を寄せる事は出来ないし、目的が不純に見えてしょうがないのです。つまり、OS側が推奨していないものを使うとは自己責任が伴って来て、いざクリックすると何処へ行くのか解らないものに、開発の余地があるのかと言う疑念が湧いて来てしょうがないのです。それよりかは、こんな具合に文法の確実なもののバグでも見つけていた方がましって感じです。実際バグはあるのですが、apple側は分かっててベータ版を出している観が有るので、報告迄も有りません。


参考迄でした。


Xcode playgroundファイルの中身 [Xcode]

 Xcode swift 言語を大概試してみたので、Sublime-text3 の日本語化に失敗していたので、なんとか直そうとしていたのですが、解説に有る通りじゃなくてデタラメやっていたらこれも偶然日本語化出来てしまいました。何でか考えたいところでしたが、まあいいやってなって、今度はそれで swift ファイルにカラーリングしたいと思ってやってみたのですが、一番近い言語が go objective-c あたりで我慢するしか無いかと結論付けたところで、試しに .playground ファイルを開いてみると、あれえ、ファイルの中身が見えます。で、こうなっていました。:


playgroundの中身.png


contents.xcplayground, section-1.swift, timeline.xctimeline の三つです。今迄試した事が無かったので気付かなかったのですが、これファイルじゃなくて sublime-text ではフォルダーとなっています。Mac ではアプリ形式で、パッケージの内容を表示で見れる形式です。で、それで見ても三つのファイルまで有るのは分かりますが、中身迄は見る事が出来ないのに、xml 形式なので見ることができます。swift ファイルは別として、後の二つはこうなっています。contents.xcplayground:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<playground version='3.0' sdk='macosx'>

    <sections>

        <code source-file-name='section-1.swift'/>

    </sections>

    <timeline fileName='timeline.xctimeline'/>

</playground>

timeline.xctimeline:

<?xml version="1.0" encoding="UTF-8"?>

<Timeline

   version = "3.0">

   <TimelineItems>

   </TimelineItems>

</Timeline>


これは、Mac OSX だけに許されている方法だと分かります。通常 xml は他のOSでは主要なところで使われているので、これだとバグの原因になるのに対して、Mac は .plist で区別していますからさして問題になりません。つまり、xml が入り込む余裕が有ったと言うわけです。それでもって、拡張子をまた違わせています。これで、xcrun の意味が分かりました。コマンドは拡張子と出会った時、同じなもの同士消し合うわけですけど、この xc はどこで消し合っているんだろうと問題を棚上げしていたのですが、ここでした。また、run はCの内部だかビルトインだかで定義付けられていて使ってはいけない関数だと認識しています。で、この timeline は、Xcode のコンソール上で絶えずプロセスとして動いているものですので、逆に言えば停止すると困るものです。で、playground はサイドビューで絶えず動いているものですから必要です。で、残りは section-1 ですが、これmac のアセンブラを知っている人なら分かると思うのですが、なんと表現して良いやら分からないので、それですとだけ。しかし良く設計された方法ですねえ。感心すると言うより、唖然としてしまいます。だからって、言語を習得するのには直接関係ありませんが、この方法はずっと残っていくのでしょうから知っていて損は無いはずです。と言うよりこの一連の流れが分からないと、旨く開発出来ないのではないでしょうか。参考迄。


Apple新言語swiftの実行ファイルの作り方 [Xcode]

 小出しで申し訳有りませんが、swift ファイルの実行ファイルの作り方で一言。私より進んだサンプルの使い方をしている人はいないか調べるようにはしているのですが、ベータ3以降のものが中々有りません。無償配布は3からなので、ベータ2の事は分かりませんが、若干合わないような感じです。通常は Xcode.app 上で試すのでしょうから、その解説では大概話が合うのですが、それ以外だと何でこんな説明になるのかな、とちょっと迷う箇所が所々あります。今の自分の環境では、UIKit がインポート出来ない環境なのでその部分は試す事が出来ませんが、それ以外であればできます。ここで、ちょっとしたサンプルで、ターミナルから swift ファイルを作り、実行ファイルを作る従来の C Java とかの方法を取りたいわけですが、なんかファイルのモードを実行ファイルに変えてやる方法も載っています。 つまり、$ chmod +x test.swift 続けて $ ./test.swift とかで出力する方法です。これでも確かに出力出来るのですが、これは swift コマンドにエイリアスを貼れば、$ swift -i test.swift とした場合と同じ事です。だとすると、一回で済む後者の方を選ぶのではないでしょうか。それとも、ベータ2では出来なかったのでしょうか。で、これシステム起動時なんか最初の時点で実行すると意外と時間がかかるので、実行ファイルとして残したいわけです。または何かの理由で見えないファイルとして残したいとかの場合は、コンパイルするしか有りません。で、ちょっとした間違いでエラーメッセージで sdk を忘れていないかいとか出て来てこうやると良いよと教えてくれるメッセージが出て来てやってみたら実行ファイルが出来ました。そのコマンドが:


$ xcrun -sdk macosx swift -o test test.swift と言った形です。で、$ ./test で出力します。難しい事なんかありません。前の xcrun -sdk macosx が増えてはいますが、関連が有るのですぐ覚えられます。忘れても何かにメモしておけば、すぐ思い出すようなコマンドです。


しかし、main関数もないのに、実行ファイルが出来るとはこれ如何に。まあ、その分が前の三つの単語とすれば、理解に難くは有りませんが、実際はわかりません。で、ネットに投稿してくれているサンプルは試すようにしているのですが、中に URL を表示すると言うサンプルを試したのですが、これターミナルから実行するとすぐ表示してくれるのですが、 Xcode の playground から行うと表示出来ないんだと思うほど時間が掛かりました。諦めて別の事をやろうとした矢先、変化があったので、見ていたら表示しだしました。気にしていなかったので、時間は計っていませんでしたが、3分ぐらい掛かったでしょうか、最初ですからしょうが無いとしても、?

参考迄でした。

*追記:一番短いサンプル swift はこれのようです。

println(“こんにちは みなさん!”)

の一行、C言語でも

#include <stdio.h>

 int main() 

printf(“こんにちは みなさん!\n”); 

return 0;

}

 

ですから、ずいぶん省略可能で、単刀直入です。

*2014.08.08追記:yosemite beta xcode6 beta5 で試したのですが、これではもっと簡単になっていて、$ swift samplefile.swift で、表示できるようです。インタラクティブモードも, swift だけで、$ swift

Welcome to Swift!  Type :help for assistance.

  1> に入れました。分かりませんが、前からそうだったの?


apple swift言語の演算子の意味について [Xcode]

 前の続きなのですが、スクリプト言語だとどうしても避けられない解説説明に演算子が有ります。これまで別のブログでも言って来たつもりなのですが、中々どうしてあれからそれらしき説明を他のページから探し出す事が出来ないところを見ると、等閑(なおざり)に進んでいるのかなと思わざるを得ません。ですが、swiftはこの演算子の使い方の意味さえ分かれば、大した迷う事の無い言語と踏みました。ですので避けて通れないところです。参考例としてまず PHP を挙げますが順番は大した意味は有りません。他にも ruby, python, js とか有ります。で PHP等のファイルは htmlの欠点を補うために作られたと筆者は思っているのですが、ウェブでは html は一般ユーザにも筒抜けの言語で、丸見えです。それでも良いかとは思いますけど、ユーザが悪意を持てば外部操作も出来る可能性を持っているので、一般には進められません。で構文なのですが<?php ?>でワンセットです。でもこれって他の言語でも形は違いますが使われています。< > の形。html ではこの中身はタグと呼ばれ、C, C++拡張系ではシステム側のヘッダーファイルがあったり、テンプレートの中身であったりと言語によって様々な名前で呼ばれますが、演算子は同じ命令をこなしているだけです。で、html, php ではファイルの先頭に来ますので、左は有りません。ここが味噌です。この説明が無いと違う事をしているように見えるだけです。中にはそんな事考えなくても分かるよ、と言うかも知れませんが、人間、環境が変って初めて偏見で物事を考えている事にやっと気付くものです。その時には後戻り出来ないくらい深い森に入り込んだ状態かも知れません。そう簡単には戻れません。時にそれを認知症とか呼びますが、認知症と言う病気がその人に取り付いたのではなく、言わば自業自得の結果だと筆者は思っています。なのでそうならないためにも、修正をしていかなくてはなりません。話を戻すと、< の次は?が来ます。xmlでもありますが、同じものです。この演算子は結構優先順位が高いものです。C では多項演算子にも使われます。命令としては文字通り問題が解決される迄読み進むです。なので最後の?にあたるまで、実行し続ける事になります。で、<?phpでphpに当たります。ここで初めてphpの領域に入ります。言ってみればある種の型に入るわけです。最後に < の対である > がありますので、結合してこの中身から抜け出ます。てな感じですが、演算子を一回で説明するのは言語上無理が有り、それ故多言語が生まれるわけですから、奥が深いんだと思います。演算子の性質は主メモリ上で行われ実行されると自動消滅してしまうものです。これを拡張したのがガベージ、自動解放機能です。他にも説明すると普通にphpの解説本になってしまうので止めますが、swift の場合、ファイルや文の最初に絶対と言える程、演算子は使われません。つまり、システム領域には入らないのです。ではどこの領域を使っているかと言うと、Xcode自身です。このアプリケーションの中身を見れば分かる通り、ライブラリからフレームワークからすべて入っています。アップ自体かなりもメモリを占有し、ちょっとしたLinuxのシステムディスク領域より有ります。なので、最初の演算子は必要ないわけです。また、文の終わりの ; は付けても直接のエラーになるわけでもありません。なくてもOKです。ならば手間を省けるわけです。さて、演算子を使っているところだけ見ていくと、数字の演算は C と変わり有りません。配列もその通りです。問題は関数とテンプレートの型とその継承とその配列構造体の参照のセットとなった時です。サンプルでは一行で表していますが、機械は迷わないかも知れませんがむしろ迷うのは人間の方です。


func 繰り返す<アイテム型>(アイテム: アイテム型, 回数: Int) -> [アイテム型]


通常型は最初に指定するものですが、これは最後に有りしかも[ ] で指定領域付きで、構造体参照で使われています。そんな事はしていないよ、と言うかも知れませんが今迄覚えて来た知識ではそのような表現になります。筆者はこれを見て、C++の機能を一行で行っていると見ているのですが、捉え方は人それぞれです。C++ファイルはその形を残したままインポートする事は可能なようですけれども、実際理解していれば上の形に置き替えた方が後々楽になる事は確かです。しかし、慣れないですねえ。型を構造体の配列で取る。なんて言われても、?


これらの表現は他にも多々有るので、しっかり理解しないとまたそこで考えてしまいます。多分機械ならエラーを吐き出して終了モードに突入するでしょうけれど、この立場は他ならぬ人間様と言うわけで情けない話です。こういうモードに陥った時は一旦やめて、頭のその中を初期化モードして、入れ物を作った方が良いようです。


なので、今回はここ迄。


見えて来たXcode swift playgroundの実体 [Xcode]

 次のコードは Xcode6-beta3 help から入って Documentation > Xcode 6 library > Languages & Utilities > swift > Guides >The Swift Programing Language の中にある Write a name inside angle brackets to make a generic function or type.のコードで原文はこうなっていて:

  • func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
  •     var result = Array<ItemType>()
  •     for i in 0..times {
  •         result += item
  •     }
  •     return result
  • }
  • repeat("knock", 4)

これを、日本語に置き替えられる分を置き替えてみました。

func 繰り返す<アイテム型>(アイテム: アイテム型, 回数: Int) -> [アイテム型] {

    var 結果 = [アイテム型]()

    for i in 0..<回数 {

        結果 += アイテム

    }

    return 結果

}

繰り返す("トントン", 4)


これで同様に右サイドに値を表示します。英語のコードに慣れた人なら、見た感じ英語の方が見易いかもしれません。日本語に置き替えられると言うことは、関数でも型でもオーバーロードできる変数型(自分が付けた名前ですので、そんな呼び方は認知されていません。)である事を意味しているのですが、キーワードを除けば日本語ですべて置き替えられます。キーワード以外の置き替えられないものはoption keyを押しながらクリックすればどこで定義しているか分かるようになっているし、プログラムを有る程度熟知している人であれば、勘で分かると思います。で、swift ではメイン関数も無ければセミコロンも無いし、pythonに近いとはいえタブとか一行開けるとかのルールも有りません。html もありませんが、タグで仕切られており、<html></html>は何らかの形でも必要です。でも、これは有りません。また、スクリプトでも最低限ターミナル端末や、ウェブであればブラウザが無ければなりませんが、有りません。と言うことは、このエディタでもあるplaygroundそのものが、ブラウザでもあり、端末でもありmain関数機能を備えていると言えないでしょうか。だとしたら、ちょっとどころか、大部欠除した思考で今試している事になります。環境が今迄とは違うのです。例えば海で暮らして来た生き物が急に山岳で暮らすようになったとか、そのくらいの違いが有ると思って掛からないと、ダイヤモンドを見つけたのに、単なる石だと思って捨ててしまうようなものだと思います。まあ、ダイヤモンドは使い方を知らなければ、単なる石ですけど。それではそうならないためにも、ちょっと別の角度から攻めてみましょう。簡単になったとはいえ、初めてプログラムを覚えたい人に取っては内部で何が行われているかが逆に見えにくいなっていると思うので、このサンプルを持ち出したのですが、そもそもplaygroundはどの時点で右サイドに表示しているかと言うと、関数を定義した時点ではまだ表示しません。またその間に構文エラーが有れば教えてはくれます。と言うことは、絶えず入力をレシーブしている事になります。この辺は、xcode5でもありました。違いは、この関数を func 抜きで入力した時です。今迄はこれ、main関数内でなければ実行時エラーです。ランタイムエラーと言った方が良いでしょうか。で、間違いが無ければ通常コンソールに表示されるので、右サイドがコンソールであり、ファイルブラウザ機能も備えているので、その更に右または下にクイックルック表示も出来るというわけで、それが今迄のクイックルックより機能が上で、スライダー付きで該当する値迄 php ウェブアプリのように表示する事も出来る、でも待ってくださいよ、phpMyAdminなんかは、mysqlのようなデータベースサーバが動いていないと、表示出来ないとなればその代わりをしているのが、sqlite3サーバ辺りでしょうか。まあ、macの場合バックグラウンドでいつでも使っているようですけど。で、コードに戻りますが、通常C, C++, Objective-Cでは関数のパラメータの並びは、main( int, char )ですが、ここでは java にあるような String, int の形です。どう言う事でしょうか。さあ、今迄とは違ってどこか不自然だと感じて来た原因がここで明らかとなりそうです。つまり、デバッガーまたはコンパイラーは今迄とは逆に鏡写しのように読んでいる事になりそうです。なので、クイックルック表示ではコメントも同じ一行の文として表示しているし、読み方はcom.apple.finder に見るような感じです。これは、ウェブブラウザーではhttp://finder.apple.com な訳です。人間はそんな逆には読む事はしませんが、相手は機械です。命令通りこなしているに過ぎません。しかし、人間ってみんな自分と同じ思考で物事を考えていると思ったら大間違いだと思います。地上には色んな人種が共存しているのであり、言語は逆さまな場合があります。例えば英語と日本語。英語を日本語に直す場合、片言の言葉を抜きにすれば逆から訳していくと旨く行く場合が有り、つまり逆に思考回路が働いていることになります。思考回路とはフロー制御の事であり、血液の流れでもあります。なので、機械とは違って肌が合わない嫌悪感が働くのが当然なのでしょうが、そこは理性で制御する事は可能です。


なんか話がだいぶ反れた感が有るので、ここで区切ります。



Xcode playgroundの画像機能についてちょこっと [Xcode]

 Appleが今打ち出している swift 新言語の紹介が日本のブログでも結構あるのですが、少し足りないようなので一つ。


playgroundではようく調べると、gnuplotのように簡単にグラフ化する機能があって、通常は見えないのですが、カーソルマウスオーバーで浮き出て来るので、すぐ分かると思います。画像で見るとこんな感じ:


swift_developer_sample .png


Appleの資料通りのサンプルです。本当は別のものを調べていたのですが、これに行き当たりました。まだまだほかにもいっぱい有りそうですが、これだけ見ても、あらら!こんなこともできるの?表計算のソフトいらないじゃん、って感じる程高機能です。ただ、これ資料とは別個のバグが有ってその通りでは旨く行かないところも有ります。まあ、何と言ってもベータ版でありバグを解決または報告するのもディベロッパーの仕事ですから報告迄。(追記:このバグは会員じゃないと出て来るバグか?)こう見ると情報が少なすぎると言うのが実感です。そこで、兼ねてからgnuplotを取り扱って来たので、何かサンプルは無いのかな、と調べるとこれは個人のブログのようで、紹介もしないで載せるのは気が引けるのですが、グラフが確認出来なかったので、合わせて投稿しました。こんな感じ:


plot-cosine.png


これは一部で下に続いているのですが、これだけで大概を表しています。gnuplotのように曲線にはなりませんが事は足りています。なお、日本語のコメントは私が訳したものです。期待通りかどうかは別として、Xcode6はかなりのことができます。今迄の集大成みたいなところがありますが、これも始まりに過ぎないのでしょう。まあ、参考迄でした。



段々分かって来たXcode6-Beta3 [Xcode]

 機能のインストールの段階ではまだはっきり分からなかったのですが、playground で表示できていない分は、xcodecommand line tool swift を選択して run すれば表示するみたいです。逆に変数は表示できなくなるので、両方からチェックして行けばエラーを見付け易くなるという仕組みのようです。アプリケーションやドキュメントベースも一応何もしないで起動させました。override func が多用されているところを見ると、C++ベースの思考がそのまま移行できる仕組みのようです。慣れればの話ですけど。当然かもしれませんが、派生が root で決定づけられているので、javaのようなインポートをしても、スタティックするクラス、メソッドは無いし嘗ての[レシーバ メッセージ]のようなメッセージ式は無いし、知っている言語様式では RubyOnRails で使うようなスクリプトです。で、これターミナルから試すのはどうすれば良いか調べたところ、こうなっていました。

# xcode-select --switch /Applications/Xcode6-Beta3.app/Contents/Developer (* 追記:ここでターミナル再起動でした。)


$ xcrun swift


Welcome to Swift!? Type :help for assistance.


? 1> var x = 1


x: Int = 1


? 2> x + x


$R0: Int = 2


? 3> print("\U+FFE3\U+FFE3\U+FFE3\U+FFAB\U+FFE3\U+FFA1\U+FFE3\U+FFAF\n")


これ”こんにちは”と打ったのですが、日本語はXなのでダメのようです。なので、昨日作ったplaygroundのファイルを.swiftにかえてコピーしてコンパイルしてみました。

import Foundation

import Cocoa

 

println("Hello, World!")

 

let hasDoorKey = false


let knowsOverridePassword = true

 

if hasDoorKey || knowsOverridePassword {


 println("ようこそ!")


} else {


 println("アクセス拒否")


}


let 天狗 = ""; // println(天狗)


let 整数 = 5


if 整数 == 5 {


 println("絵文字が出てますか?\(天狗)")


} else {


 println("構文が理解できません。")


}


$ xcrun swift -sdk $(xcrun --show-sdk-path --sdk macosx) -i main.swift

 

Hello, World!


ようこそ!


絵文字が出てますか?(何故か投稿すると消えるようです。)


当たり前ですが今度は、日本語も表示します。これで、一通り試したことになるのですが、アプリケーションをターミナルからビルドすることもできますが、余り意味が無いと思ったので、省略しました。コードを打ち込む手間が楽になった分、頭の中の理解力が追っ付くかどうか心配ですが、すべての言語を網羅しているという前振れ通り、何でもできそうな感じがしてきますねえ。で、これを見てDeveloper としての私の使命はというと、Xcode の help にある Document には、今のバージョンでは動かなくなったサンプルコードを swift 言語に置き換えるという課題があって、これに挑戦しようかなと思っています。勉強にもなるし。みなさんどうでしょうか?この世界では誰かがやってくれると思っていたら取り残されるばかりです。


Xcode6Beta版を試してみた [Xcode]

 Xcode6ベータ版の無償リリースがいつの間にか出ていたので、ダウンロードして使ってみました。アップルさん早かったですね。無償版が出るのは yosemite が出るちょっと前くらいかと思っていたのに、もう出すとは。まあibooksではどんな案配かは読んでいたので、頭には理解できてもコードは試してみて初めて実感できるので待っていました。で、playgroundでマニュアル通り試してみるとこんな感じです。:


playground.png


今回は最初の触りの部分しか載せていませんが、これだけ試せれば十分です。今迄はこのように試すのにターミナルからコードを作ってコンパイルしてから実行していましたが、これは、説明に有る通り記入して行くだけです。最初の import Cocoa 何かはjava, python, ruby, go風でひな形で自動で出てくるものです。後は変数を定義して行くと右サイドに出てきます。ずうっと書いて行ってどこか可笑しいところが出て来ると、すべて、グレイに変わるのですぐ分かります。構文が間違っていなければ、ブラックや絵文字です。この println(“ ”) では、他の言語だと今まで%d, %c, %s, %@とかでしたが、\( )で纏められているところは swift ならではでしょうか、型を自動で判断するのですから世話が有りません。日本語は当然定義できるようです。が、使い方次第では反って煩わしくなるので要注意です。個人的には学校の教材で使えると思っているのですが、日本じゃあねえ?たかだか30行ぐらいですが、最初の一歩としてはこれを理解するまで、相当勉強しなければならないし、教える方もこれ以上のことを知っていなければ教える立場には立てないので、どちらも大変です。でもC言語のような煩わしさはないので、小学生にも教えようとすれば教えられます。気を付けなければならないのは、これで答えを教えることはできません。答えは機械が出してくれます。だから、考え方だけです。それは成績では評価できないものです。点数は有りません。それで良いんだと思います。所詮社会人になってからが勝負です。「あの人学校の成績は優秀だったのに」、何か足し算引き算も分からないような使い方をして、マスコミに叩かれて有名人になるのではシャレになりません。この調子だとまた発信国に水を開けられそうです。それはそれとして、良いものはどんどん活用しましょう。


前の10件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。