Translate

2017年2月23日木曜日

Swift 3 勉強中、オブショナル? 初期化すればよくね! 感嘆符と疑問符だらけ ?? nil  

Disり駆動勉強中です!
 
オプショナルって、未初期化でエラーを出したくないという事のために随分とめんどくさい仕様を盛り込んでコード見づらくしたもんだという所感。

オプショナルって以下だよね

・普通の型にはnil入れられないという仕様にした。
          var hoge:String = "ホゲホゲ"
          hoge = nil    < エラー

・nil入れるために、普通の型改(オプショナル型)を作った。
 疑問符(?)つけて定義します。 
    var hoge:String? = "ホゲホゲ"
          hoge = nil    <OK
  しかし、こんなことしたい場合そんなに多くないきがするがなー
 
・普通じゃないのでnil以外が入っている時に、普通に処理できない。
    var hoge:String? = "ホゲホゲ"
          hoge += "ピヨピヨ"    <エラー    余計なことするから・・

・nil以外を処理するために、一時的に普通の型に変換する仕組みを作った。オプショナル型に感嘆符(!)をつけて処理します。
    var hoge:String? = "ホゲホゲ"
          hoge! += "ピヨピヨ"    <OK 何びっくりしてるんだか・・

 ・nilだった場合の初期値ってのも用意されている、疑問符疑問符(??)。
  var kosu:Int?
      var kakaku:Int
      kakaku = 120 * (kosu ?? 1)
  ちゃんと初期化して計算式通せよ!・・

 なお、オプショナルバインディングは、コード的に楽になる面も多いので、disりません^^
でもあとで判断するか、先に初期化しておくかという違いなだけだとも言える・・

 
   


 

2017年2月20日月曜日

Unity SpaceX Falcon9に触発されて、ミサイルの再利用に挑戦した

スペースXのファルコン9すごかったです!
着陸動画(本物のほう)
で、Unityでも着陸させてやるって思ったわけです

とりあえず作りました・・・
まるまる同じじゃなく、ミサイルの再利用です
イーロンマスクには全く及びませんね・・ゴメンなさい


一応説明すると、コールドローンチタイプで発射したミサイルは、UFOに突っ込みます。その時弾頭は外れます(宇宙戦争はしたくないので爆発しません)。その後、発射位置上空にロケット部分は戻ってきて、ゆっくりと軟着陸するというわけです。 
※念のためですが、ミサイルにはGravityがかかっています

( 設計図 )



(通り過ぎることもあるミサイル・・ )


(用が済んだら戻ります、丸いのは弾頭で当たった場に浮いてます)

(帰ってきました、お互いにぶつかったりもします)

課題点
  姿勢制御しきれていないので、着陸時に横滑りして台座を外れることもあります。単に上むいて落ちてくるんじゃ風にも流されそうだし・・スラスターがいるかも。
 あと、ターゲットや帰着点上空へ行く速度が速すぎるので通り過ぎてしまい、結局は到着に時間がかかってしまうので、ターゲットへ向けた減速を考えたほうが良いでしょうね・・

コード
 ロケットの処理はほぼコールドローンチのやつにターゲットを変えて微調整しただけです

弾頭が外れる処理
親の親オブジェクトにメッセージ送るのって
transform.parent.transform.parent.SendMessage(..
で良いのだろうか?動いてるけど、もっとスマートな方法
あるかな。





※それにしてもSpaceX Falcon9 ヤバイね!! こんなのバンバン再利用され始めたら、その他のロケット無駄すぎて使えない、過去の遺物だよ。


 








Swift 3 勉強中、文字列の最後の文字読み出し、str.index(before:xxx)とか?、面倒だねー

えっ?まじですか?
swiftで文字列の最終文字取り出しってこんな面倒なの?
そしてしつこいようだけど、これモダンな言語なの?


他になにか手はないのか?
せめてこんな感じで出来ないのかなー


これもめんどくさいし

本当はこんな感じが出来てほしい
str[str.length-1]



2017年2月19日日曜日

Swift 3 勉強中、numbers.map{$0 * 2} とか、クロージャ?・・モダンな言語なの?記号ちっくな言語では?

夕食後もdisり手法でSwift勉強中です
クロージャ(ブロック)のあたりです

let numbers = [1,2,3,5,8,13,21]
let array1 = numbers.map{$0 * 2}

とかできちゃうけど、$0って、第一引数だとか..
何それ?何それ?
 
C言語ちっくをやめてモダンになるはずでは?
それなのに、変な省略形もあったもんですなー

私は下のような省略しない方がわかりやすいと思うだ

let array1 = numbers.map){(val:Int) -> Int in
     return val * 2
})

おぼえりゃ読めるようになるだろうけど。
覚えるためにdisりブログってるわけですだ
 


 

Swift 3 勉強中、defer文もなかなか癖がありますなー

defer文
ブロックを抜ける時に動く処理を書いておくもののようです
 
しかし、書くとどの順番で動くのか直感的ではない・・
deferは下から動く仕様らしいので
書きようによっては下から上に処理かけちゃうよ・・
 ノイマン先生げきおこ?


あと、deferはreturn文より上に書いておかない機能しないようですな。下の例では、3の時挨拶しないで終わっちゃってますよ・・アララ
 




Swift 3 勉強中 関数でいち抜けたするのに、gurad-else文で書かねばなんねの?

今日は関数など勉強中
関数途中抜けするのに guard - else文ってのがあるようだけど、これはifの反対条件でRubyで言ったらunless文なんですかね?どう言う意味で使うんだろう?
「守れないので抜けたー」みたいな戦前逃亡??





別にif文で良くないですかね〜
エラーもワーニングも出ないようですし。

決めなら決めにするし、半端なら無駄に拡張するのやめろー
なんかSwiftってまだブレてるでしょ。
(個人的意見です)




2017年2月18日土曜日

Unity まゆ?Trail Rendererで繭のようなものを描いただけ


Swiftで頭が疲れたのでUnityでちょっと発散w
繭?鞠?針金?

なんだろう?
ふと思ってやってみただけです


-処理-
中心点からほどほどに離れた点にTrail RendererをつけてRandom.rotationで、回転位置を変更してぶん回すのを繰り返しただけです


注意:色つけたら、見てはいけないモノが現れたので、白にしました(怖)