我が名はなんとか菜である!

主に技術系の記事を書きますが、ポエムも混入します。

Swift1Dayに行ってきた

まーたしばらく放置してしまった。

タイトルの通り、CyberAgent主催のSwift1Dayというハッカソンに行ってきました。

技術系イベントに行ったのに何も書かないのもどうかと思ったので、備忘録的に記しておく。

こういう新しい言語に触れる場は貴重だと思うし。(特に僕はMac持ってないからなおさら)

あ、なのでMacは当日にMacBookProを会社にお借りしました、ありがとうございました♨

--

さて、何をやったかというとずばり

Swiftはさみ将棋を作る」

である。

持ち時間は、休憩を1時間挟んで大体7時間。

課題自体の難易度としてはそんなに高くはないと思ったが、何しろ環境がSwiftMacXcodeというのが最大の問題。

まず、僕自身のiOSのアプリ開発経験がCocos2dx 3.xしかない。(要するにC++で書いた)

Obj-Cですら舐めた程度で殆ど書いたことがないレベル。

悩んでもしょうがないので、取り敢えずXcodeでNew Projectして、プロジェクトの名前を入れて…

おや、このUI KitとかSprite Kitみたいなのはなんだろう、Google先生教えてちょーだい。

・・・

なるほど、作りたいものに合わせて選ぶ系のソレらしい。

UI Kitが普通のUIアプリで、Sprite Kitがゲームアプリらしい。じゃあ今回はSprite Kitでいいのかな。ちなみにOpenGLとか言うのもあったけどさすがにそれはスルー。

というわけでこんな感じでようやく書き始めたのだが、この時点で30分くらい経過してたものだから非常にしょっぱい感じである。

Swiftの文法自体は、非常に素直で分かりやすく、モダンな印象。まあ、あの天下のApple様の言語だしね、モダンでクールな感じなのは流石である。Appleすきじゃないけど

例えを色々載っけておこう。

変数宣言

//定数
let MAX : Int = 200 

//右辺値の型で推論することも可能
let MIX = -200

//変数も同様に
var number = 0

//配列。ちなみにSwiftの配列はサイズ指定がなく、全て可変長。
var table : [Int] = [1,2,3,4,5] 

//ジェネリクスはもちろん、名前付き引数での引数指定も可能。
//countが大きさでrepeatedValueが初期値らしい
var results = Array<Int>(count: 16, repeatedValue: 0) 

クラスとメソッド

class test
{
   //初期値書かない場合は型名必須 まあ当たり前
   //その場合はコンストラクタ書いて初期化しないとコンパイルエラーになる
   var field : Int; 

   //コンストラクタ もしかしたらイニシャライザって名前かもしれない、名前的に
   init()
   {
      field = 0;
   }

   //internalはpublicって意味。
   //最初にpublicって書いたらXcodeに「internalって書けよ」って怒られた
   //試してないけど書かないとprivateになるんじゃない?(適当)
   internal func equal(a : Int, b : Int) -> Bool //型名は後置する。C++みたい。
   {
      return a == b; //比較演算子はいつもの通り
   }

   internal equal3(x : Int, y : Int, z : Int) -> Bool
   {
      //関数呼び出し。
      //ちょっと納得いかなかったのが、引数指定の時に、
      //1個目は引数名を省略しなきゃ"いけない"のに、2個目以降は"必須"という点
      //どうせなら全部書けるようにするか省略可能にすりゃいいのに
      //怒られてる状態でコンパイルしたわけじゃないので、Xcodeのバグかもしれないけど(不正確)
      return equal(x, b : y) == z;
   }

   //ちなみに型名は省略出来るらしいですよ おや、楽しそうな香りがしますね?
   internal func getField()
   {
      //thisじゃなくてself selfは変数名が被らなければ省略可能
      return self.field;
   }
}


さて、そんなこんなで(クソ適当な省略)ハッカソンしてきたわけだが、結果から言うと僕のやつは完成しませんでした♨
内部のはさみ将棋の処理は完成してたと思うんだけど、それを操作するUIが全然出来てなかった。まあ、初めてだからしょうがないとはいえ、ここはかなり悔しかった。

でもコマをタップするとそのコマが選択状態って分かる画像に差し替わったり、ちゃんと画面の大きさが変わっても大丈夫なようにとか、全てが初めてのわりにはしっかり設計は出来てたほうだと思うし・・・?(見苦しい)

ちなみに順位発表もありました。

1位の人のやつは、完成はもちろんのこと、なんとAIも搭載されていた。手はランダムだったけど。
ああいう人を見ると、次は頑張っていい成績を残したいなぁと思いますね。

というわけでまとめに入りますと、凄くいい経験になったと思います。
Swiftに触れたというのはもちろん、CyberAgentという今活発な企業のオフィスに入れたというのも、就活的にとても刺激になりました。まあ就活は僕はもう終わってるんですけどね
やっぱりこういうのは時間のあるときに参加しておくべきだと痛感しました。もっと行かないとなぁ。

このイベントを紹介してくれた某氏には、この場を借りてお礼申し上げます。ありがとう!また行こうね!!!