Swiftスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/03(火) 04:12:21.08ID:rEEU5ykvhttps://developer.apple.com/swift/
0335デフォルトの名無しさん
2014/06/05(木) 09:20:29.95ID:XW7Omk0cドキュメントのソース部分以外ほとんど見てないから想像だが
export で指定したものが他のモジュールから見えるのだと思われる
デフォルトが private で export で指定したものだけ public ?
C言語や関数型の言語と同じような指定の仕方か
環境使える人詳しく教えて
0336デフォルトの名無しさん
2014/06/05(木) 09:28:26.87ID:23MIBYyX>>323 >なぁ、なんでconstがletなんだ?
let j = i
と言う使い方も有り、必ずしも定数とは限らないから。 これ以降変化しないよと言う定義。
0337デフォルトの名無しさん
2014/06/05(木) 11:02:18.15ID:oKmamV8t0338デフォルトの名無しさん
2014/06/05(木) 11:24:31.82ID:fhxWm8Xr直接的には、iがimmutableってニュアンスは無いと思うけど、
いまはimmutableな変数をなるべく使うべしって流れがあるからletにその役目を与えて、
mutableには別のvarって構文を用意したと
Rustはimmutableもmutableもletで宣言するけどデフォルトはimmutableで、
mutableな変数を定義するときにはlet mutとかするねえ
0339デフォルトの名無しさん
2014/06/05(木) 12:46:01.63ID:VmoRAZhYvarはvariable=変数=変化するもので、容れ物や箱やメモリそのものみたいなイメージ。
mutableかimmutableかの違いだけにみえて、内部実装的にもかなり取り扱いが違うんじゃないかと予想。
0340デフォルトの名無しさん
2014/06/05(木) 13:01:00.00ID:/748C5a20341デフォルトの名無しさん
2014/06/05(木) 13:01:33.97ID:/lL990/k世界でiPhoneシェア一番高い国だし
0342デフォルトの名無しさん
2014/06/05(木) 13:04:11.37ID:ICYd1xse>Swiftの関数はHaskell風。これはいい。マシン語が透けて見える。CPUの歓声が聞こえてきそうだ
0343デフォルトの名無しさん
2014/06/05(木) 13:07:28.65ID:23MIBYyXhttp://jp.techcrunch.com/2014/06/05/20140604a-developer-cloned-flappy-bird-using-apples-new-programming-language-swift-in-a-matter-of-hours/
以前の開発言語、Objective-Cに比べて、Swiftに新たに備えられた高度な機能がデベロッパーの生産性を大きく向上させるだろうという予測が実証されたかたちだ。
Murrayは実際に使ってみて「新しくiOSアプリの開発に取り組むプログラマーに対してハードルを下げる「というAppleの目標は達成されたと考えている。
Murrayによれば、Swiftの大きなメリットの一つはPlaygroundsと呼ばれる機能だという。
ここではコードを編集しながら、それが実際にどう動作するかをリアルタイムで見ることができる。
「4時間よりはかかったが9時間まではかかっていない。ログによると空のフォルダーからデモが作動するようになるまで9時間近くかかっているが、その間に食事もしたし、子供を寝かしつけたりしていたのでね」と語った。
ソースコード
https://github.com/fullstackio/FlappySwift
0344デフォルトの名無しさん
2014/06/05(木) 13:11:20.47ID:fhxWm8Xrまだシンタックスハイライト対応してないのかwがんばれGithubちゃんw
0345デフォルトの名無しさん
2014/06/05(木) 13:41:38.15ID:5c6Sl3clif let it = go {it.foo()}(実質「goがnilじゃない場合foo()を実行」と同義)
みたいな使い方するみたいだし
>>267
言語的に特別扱いしないでC言語周りが使えるのは何気に凄いな
0346デフォルトの名無しさん
2014/06/05(木) 14:00:04.98ID:epSx9FaUlet強制だとしたらいくらなんでもやり過ぎだな
0347デフォルトの名無しさん
2014/06/05(木) 14:01:03.50ID:fhxWm8Xrletが値を返す式というわけじゃ無いと思うが自分は確かめるすべが無い
Language Reference見る限りifの次に式か宣言の両方が書けるということになってる
let 〜は宣言で、宣言は式じゃないから
let a = let b = 0
みたいには書けないんじゃないかな?
0348デフォルトの名無しさん
2014/06/05(木) 15:40:25.97ID:MTRKCqc9http://peace.2ch.net/test/read.cgi/tech/1393660194/
0349デフォルトの名無しさん
2014/06/05(木) 15:41:28.90ID:N9ZszDAJ何のための言語がよく分らないものができたってかんじか。
>非常に軽快に動くことが特徴であり、
特徴でもなんでもないし。
0350デフォルトの名無しさん
2014/06/05(木) 15:48:43.38ID:23MIBYyX0351デフォルトの名無しさん
2014/06/05(木) 15:53:18.65ID:bTGozmC40352デフォルトの名無しさん
2014/06/05(木) 15:59:18.60ID:N9ZszDAJおまのレスを読んでもガッカリ感しか感じない。
JavaやC#を超える衝撃的な「何か」はないのか?
0353デフォルトの名無しさん
2014/06/05(木) 16:04:29.96ID:/lL990/k0354デフォルトの名無しさん
2014/06/05(木) 16:14:34.40ID:VmoRAZhYOSXやiOSで開発する上で必要なものや便利なものをまとめ上げた言語だと思う。
考え方としてはDSLにちかいんじゃないかな。
0355デフォルトの名無しさん
2014/06/05(木) 16:17:17.84ID:XqFykZgR0356デフォルトの名無しさん
2014/06/05(木) 16:19:40.60ID:7wqllzhY0357デフォルトの名無しさん
2014/06/05(木) 16:19:51.45ID:N9ZszDAJコードにCのprintfが混ざってるなんて勘弁してくれ。
0358デフォルトの名無しさん
2014/06/05(木) 16:22:50.06ID:EQvmYwTS0359デフォルトの名無しさん
2014/06/05(木) 16:25:17.28ID:X78aNysaあれって実体がマクロだったりしたっけ
0360デフォルトの名無しさん
2014/06/05(木) 16:30:26.15ID:sui12ysriナンタラの開発ができるということに尽きるのではなかろうか
objective-cなんか使わされるよりははるかにましな気が
0361デフォルトの名無しさん
2014/06/05(木) 16:32:44.37ID:EQvmYwTS可変長引数だめなんか
0362デフォルトの名無しさん
2014/06/05(木) 16:39:16.44ID:N9ZszDAJ0363デフォルトの名無しさん
2014/06/05(木) 16:48:43.10ID:X78aNysaNSLogは使えるんだよねえ
0364デフォルトの名無しさん
2014/06/05(木) 17:00:29.40ID:ssQRlflZiOS8向けの開発をSwiftでやりたいがベータ版の開発環境は使いたくない
0365デフォルトの名無しさん
2014/06/05(木) 17:03:54.12ID:sui12ysrこの銀河系に存在する全言語で採用して欲しい
0366デフォルトの名無しさん
2014/06/05(木) 17:15:14.85ID:2XZ0moAz0367デフォルトの名無しさん
2014/06/05(木) 17:20:36.18ID:bTGozmC4そうなると逆に複数行にわたって1つのstatementを書きたい時はどうなるんだ?
シェルみたいにバックスラッシュで連結かなあ?
semicolon省略に関する記述と、1行に複数statementの時はsemicolon要るって記述は見つけたんだが……
0368デフォルトの名無しさん
2014/06/05(木) 17:23:07.17ID:7wqllzhY>>343 とかまだらに残ってて笑った
0369デフォルトの名無しさん
2014/06/05(木) 17:24:53.47ID:U2o1cB0T試したところスペースが入りうるところでは任意に改行できるみたい
改行前のバックスラッシュはエラー
0370デフォルトの名無しさん
2014/06/05(木) 17:26:49.78ID:bTGozmC4それ、構文的にstatementの終わりかどうかを判別できてるってことだよね?
だったら、1行に複数statement入れた時も、判別できるからsemicolon不要だと思うんだが……
0371デフォルトの名無しさん
2014/06/05(木) 17:28:38.98ID:D0EgXF030372デフォルトの名無しさん
2014/06/05(木) 17:29:14.79ID:U2o1cB0Tconsecutive statements on a line must be separated by ';'
というエラーが出るから、構文の区切りは判断してるけど可読性のためにセミコロンを明示的に入れよ
というルールにしていると思われる
0373デフォルトの名無しさん
2014/06/05(木) 17:36:11.09ID:3dO8/iia0374デフォルトの名無しさん
2014/06/05(木) 17:36:25.69ID:bTGozmC4それなら、複数行のstatementがどこで終わるかわかりにくいから
可読性のためにsemicolonを入れて欲しいよ……
何か気持ち悪いなぁ
0375デフォルトの名無しさん
2014/06/05(木) 17:46:41.07ID:XqFykZgRセミコロン入れたいのなら自分で書けば良いだけだろ
変なこと行ってるぞお前
0376デフォルトの名無しさん
2014/06/05(木) 18:00:43.18ID:hxrPvcfiOS X が BeOS だったらそうなっただろうね。NeXT になったから ObjC。
NeXT は Apple から追い出されたジョブスが Machintosh の有力開発環境だった Smalltalk に親しんでいたから inline Smalltalk を書ける ObjC。
そういう歴史。
>>372
これも Smalltalk からの歴史。Smalltalk ではコロンでは無くて . だけど。
ちなみにどっかの論文で、BASIC や Smalltalk のようなセパレータタイプよりも、C のターミネータタイプの方が学習が容易で間違いが少ないという実験があった。
0377デフォルトの名無しさん
2014/06/05(木) 18:01:35.29ID:Ss1X6IjIvar a = rand() var b, c: Int? b = a % 20 > 10 ? 10 : 20 c = a > 10 ? b : b! + 20
ぱっと見で瞬時にセンテンスの区切りが分かるならセミコロンはいらんだろうな
0378デフォルトの名無しさん
2014/06/05(木) 18:08:39.95ID:bTGozmC4いやいや、必須になってるのと任意になっているのでは「他人のコードを読む」ときの
可読性が違うから気にしてんだよ。自分のコードなら入れるって。
1行に複数statementの時は「必須」だから文の切れ目がわかるけど
複数行に1statementの時は「任意」っぽい(?)からわかりにくく「書ける」ってこと。
0379デフォルトの名無しさん
2014/06/05(木) 18:15:14.57ID:Ss1X6IjIそんなに分かりにくかったら空行なりいれればいいわけだし
0380デフォルトの名無しさん
2014/06/05(木) 18:22:25.93ID:bTGozmC4だから、自分で書くんだったら注意するって。
実際に見てみたらわかりにくくないってことないのかなぁ?
まぁ、当面はXcodeしかコーディング環境がないからXcodeが上手いこと見せてくれれば問題ないか
0381デフォルトの名無しさん
2014/06/05(木) 18:36:08.42ID:fhxWm8Xr複数ステートメント1行セミコロン無しでわかり難い例は>>377にレスしてくれてるんだから、
1ステートメント複数行でわかり難い例ってのを具体的に書いてみたら?
0382デフォルトの名無しさん
2014/06/05(木) 18:44:38.48ID:U2o1cB0T0383デフォルトの名無しさん
2014/06/05(木) 18:52:06.49ID:fhxWm8Xr0384デフォルトの名無しさん
2014/06/05(木) 18:55:52.22ID:k17DeP1NiOSの方は5sのみ64bitで後は移行中だけど
0385デフォルトの名無しさん
2014/06/05(木) 18:56:05.34ID:U2o1cB0T0386デフォルトの名無しさん
2014/06/05(木) 18:58:38.99ID:XqFykZgRこういうことを Swift では出来なくなったみたいだな。
{} がクロージャとして認識されるから。
0387デフォルトの名無しさん
2014/06/05(木) 19:09:55.48ID:OzgJ1p8pVB9なんかは多項式の途中で改行するとエラーになったりして救えなかった
0388デフォルトの名無しさん
2014/06/05(木) 19:24:02.90ID:fhxWm8Xrそういうのは関数内で関数定義して呼び出しちゃえばいいんじゃない?
コンパイルされるコードは最適化されちゃって変わんないと思うよ
0389デフォルトの名無しさん
2014/06/05(木) 19:24:35.64ID:fhxWm8Xr解析ルールは明示されてるよ
0390デフォルトの名無しさん
2014/06/05(木) 19:25:14.43ID:bTGozmC4こ、こんなのであってますか……言語仕様もいまいち分かってなくて
コンパイル通るかもわかんないけど……
var hogehoge = "hogehoge"
var a : Boolean = let b :
Integer = 0b11110000 && let
hogehog = "gehogeho"
0391デフォルトの名無しさん
2014/06/05(木) 19:26:21.05ID:bTGozmC40392デフォルトの名無しさん
2014/06/05(木) 19:34:00.01ID:XqFykZgR0393デフォルトの名無しさん
2014/06/05(木) 19:39:35.40ID:/lL990/k2行目の b と : の間で文法エラー
0394デフォルトの名無しさん
2014/06/05(木) 19:40:36.38ID:fhxWm8Xrなんかめちゃくちゃだと思うが、
式の途中で改行とかすれば次の行の先頭にインデントとか入るだろうから
行の初めが前の行から継続してるかどうかは自明になると思う
0395デフォルトの名無しさん
2014/06/05(木) 19:49:48.50ID:18Wy6DPo0396デフォルトの名無しさん
2014/06/05(木) 19:51:30.46ID:bTGozmC4( ̄Д ̄)ノ オウッ すまんの試す環境がないから
さっき聞いたスペースが入るトコはどこでも改行できるって話を元に考えただけだし
IDEでのフォーマットはない前提な
型の名前が間違ってるのは愛嬌で許してくれよ
>>393
型との間の:は空白を許さないの?それとも型とコロンの間の空白はきっちゃダメ?
後、letで代入する値が変数じゃなくてリテラルの場合は常にtrueだから
もしかしたら怒られる?それとも単に最適化でtrueに変換されるだけかな?
試したい……
0397デフォルトの名無しさん
2014/06/05(木) 19:55:14.22ID:fhxWm8XrIDEのフォーマットが無い前提って、インデント無しのコードを読めってこと?
そんなの問題外じゃない?
あと、letがBooleanを返す?って他でも書いてる人がいるから調べてるんだけど、
どこかのドキュメントに書いてある?
0398デフォルトの名無しさん
2014/06/05(木) 19:58:17.00ID:/lL990/k}
って書き方できるから勘違いしてるんだろう
letがBool返すわけではない
0399デフォルトの名無しさん
2014/06/05(木) 20:11:52.36ID:bTGozmC4if let a = b は The Swift programming languageの頭の方のControl Flowの節で出てて
↓
“If the optional value is nil, the conditional is false and the code in braces is skipped.”
抜粋:: Apple Inc. “The Swift Programming Language”。 iBooks. https://itun.es/jp/jEUH0.l
ってなってるから、condition is "false" って値が取れると思ってた。ってか、取れないんだ?
複数の値のnil値判断を&&で出来ると思ってた。
0400デフォルトの名無しさん
2014/06/05(木) 20:25:51.95ID:Ss1X6IjIif i {
println("i = \(i)")
}
はオッケー
var i: Int = 10
if i {
println("i = \(i)")
}
はアウト〜
0401デフォルトの名無しさん
2014/06/05(木) 20:35:36.13ID:bTGozmC4つまり?のついている値が"optional"ってマークされてるものの値を評価してるわけだ。
letの返値じゃなくて、代入された値を評価してる、と。
"optional"な値の場合は、nilはfalse、nil以外がtrueとして評価される、と?
"optional"じゃない場合は、条件式で利用できない……か。
0402デフォルトの名無しさん
2014/06/05(木) 20:48:52.91ID:q+iSb4xf0403デフォルトの名無しさん
2014/06/05(木) 20:50:04.79ID:N9ZszDAJ0404デフォルトの名無しさん
2014/06/05(木) 20:53:59.72ID:DVEEJUDF0405デフォルトの名無しさん
2014/06/05(木) 20:57:26.27ID:D2wOjwoR0406デフォルトの名無しさん
2014/06/05(木) 21:07:17.88ID:23MIBYyXThe Basics の Optional Binding
You use optional binding to find out whether an optional contains a value
if let constantName = someOptional {
元々 if a=b をエラーにするから、代入兼判定としてletを使うようにしたと言う事だろうけど。
0407デフォルトの名無しさん
2014/06/05(木) 21:20:07.46ID:Ss1X6IjI別にletじゃなくてvarでもいいんだけど
var a: Int? = 10
if var b = a {
println("b = \(b)")
}
0408デフォルトの名無しさん
2014/06/05(木) 21:51:22.48ID:qTkh2drYappendした後の挙動がバグ臭プンプンする。
0409デフォルトの名無しさん
2014/06/05(木) 22:04:27.80ID:bTGozmC4大事なのは Int? の ? だと思うんだが。?のついている型だけが代入時のnil判定に使えるということじゃないの?
>>408
後ろはNSMutableArrayじゃなさそう?
0410デフォルトの名無しさん
2014/06/05(木) 22:08:28.49ID:ZaCMtfJy0411デフォルトの名無しさん
2014/06/05(木) 22:23:42.09ID:qTkh2drY“Assignment and Copy Behavior for Arrays”を読んで欲しいんだけど、
var listA = [1,2,3]
var listB = listA
listB[0] = 9
ってするとlistA[0]も9になってる。
まぁこれは普通だよね。
だけどこのあと
listA.append(4)
って要素数が変わる操作をしたら
listA[1] = 22
ってしても listB[1] は2のまま。
分かっててもミスりそう。
0412デフォルトの名無しさん
2014/06/05(木) 22:32:28.70ID:bTGozmC4これはトラップ過ぎるwwww
funcに引数で渡されてきたArrayはどういう扱いなんだろう?
要素追加した瞬間にcopyされて別物か?
0413デフォルトの名無しさん
2014/06/05(木) 22:33:26.53ID:Ss1X6IjIvar dictA = [0:1, 1:2, 2:3]
var dictB = dictA
dictA[0] = 9
ってやると、dictA[0]は9になるけど、dictB[0]は1のまま
0414デフォルトの名無しさん
2014/06/05(木) 22:39:53.87ID:O/ymbC/3http://blog.livedoor.jp/rapple_lab/archives/7720544.html
0415デフォルトの名無しさん
2014/06/05(木) 22:42:40.01ID:qTkh2drYarrayもdictionaryもstructureなんだからdictionaryの動作が正しいよね。きっと。
arrayのはパフォーマンス上げるためなんだろけどunshareを標準にして欲しい。
>>412
>要素追加した瞬間にcopyされて別物か?
明日試してみるよ
0416デフォルトの名無しさん
2014/06/05(木) 22:53:48.76ID:ZqenSHM0swiftは無い?
0417デフォルトの名無しさん
2014/06/05(木) 22:54:26.94ID:ZaCMtfJy0418デフォルトの名無しさん
2014/06/05(木) 22:54:34.73ID:qTkh2drYでループさせて array[i] で参照したほうが20%ほど早かった。
この辺もobjective-cと違うよね。
0419デフォルトの名無しさん
2014/06/05(木) 23:02:45.98ID:sbVpP/3Mvar array1 = [1,5,7,4]
var array2 = sort(array1, >)
この時、array1までもソートされる破壊的な操作なんだけど、
sort(&array1, >)
って呼ぶのを強制された方がしっくりくるのだが。
0420デフォルトの名無しさん
2014/06/05(木) 23:06:47.17ID:wJ9V7wb/0421デフォルトの名無しさん
2014/06/05(木) 23:07:49.74ID:qTkh2drY同意!!
0422デフォルトの名無しさん
2014/06/05(木) 23:10:47.70ID:DedpSM9H文法にambiguousな部分が出てきたりしないのだろうか。
0423デフォルトの名無しさん
2014/06/05(木) 23:12:19.01ID:ZqenSHM0よくわかりません、どゆこと?
0424デフォルトの名無しさん
2014/06/05(木) 23:15:46.09ID:Ss1X6IjIあと関数の引数に配列を渡して操作するきは、inout付きにした方がいいのかな
0425デフォルトの名無しさん
2014/06/05(木) 23:15:46.59ID:XqFykZgR破壊されたくなければ、明示的に
var array2 = sort(array1.copy(), >)
しろって方針なんだろうな。コスト削減のために
0426デフォルトの名無しさん
2014/06/05(木) 23:18:00.24ID:XqFykZgR0427デフォルトの名無しさん
2014/06/05(木) 23:21:06.13ID:Ss1X6IjIvar array2 = array1.copy()
array2.sort(>)
若しくは、
var array1 = [1,5,7,4]
var array2 = array1
array1.unshare()
array2.sort(>)
とか
0428デフォルトの名無しさん
2014/06/05(木) 23:27:16.58ID:ABWTHSvc仮にも標準関数なのに
0429デフォルトの名無しさん
2014/06/05(木) 23:27:27.26ID:lzzD+Ao8Effective本的なのが欲しいね。細部の落とし穴が存在しない言語なんて求めるだけ酷だろし
0430デフォルトの名無しさん
2014/06/05(木) 23:28:15.04ID:XqFykZgRa.unshare()
...//いろいろな処理
}
こうすればいいのか。
ちなみに引数のところから var を抜くとエラーになる。
0431デフォルトの名無しさん
2014/06/05(木) 23:45:56.24ID:XqFykZgRlet listB : Int[] = listA.filter({$0 % 2 == 0})
let listC = filter(listA,{$0 % 2 == 0})
listB は普通の新しい配列なのに、listC は遅延リストなのが面白いな
0432デフォルトの名無しさん
2014/06/05(木) 23:51:31.90ID:Ss1X6IjIディクショナリは代入した時点でコピーしちゃうみたなんで、おいそれと代入しにくいな
配列よりむしろディクショナリの挙動の方が気になる
0433デフォルトの名無しさん
2014/06/06(金) 00:29:37.83ID:GafzTiNN0434デフォルトの名無しさん
2014/06/06(金) 00:35:14.23ID:lrmBy0jf■ このスレッドは過去ログ倉庫に格納されています