X



Swift part10 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 3b3c-eq+O)
垢版 |
2017/02/20(月) 10:00:13.40ID:ChbPWtRt0
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

関連スレ

プログラミング言語Swift Part4
http://potato.2ch.net/test/read.cgi/mac/1484763495/

[SDK]iPhoneアプリ開発初心者質問箱48[touch][iPad]
http://potato.2ch.net/test/read.cgi/mac/1484217623/

Xcode part14
http://potato.2ch.net/test/read.cgi/mac/1476190499/

Swiftアンチスレ part1
http://echo.2ch.net/test/read.cgi/tech/1458491343/

前スレ
Swift part9
http://echo.2ch.net/test/read.cgi/tech/1476758084/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0708デフォルトの名無しさん (ワッチョイ 0f1f-9J/J)
垢版 |
2017/05/27(土) 22:49:30.62ID:SDTaiU/Z0
Write your code using the model given by copy-in copy-out, without depending on the call-by-reference optimization,
so that it behaves correctly with or without the optimization.

…最適化と言い張ってるがこれはひどい
0709デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/27(土) 23:01:24.62ID:aL4+kPgB0
このぐらいの最適化はやってくれた方がありがたい
参照渡しの方が確実にパフォーマンス上がるし、通常の使い方で副作用もない
副作用があるようなら書き方に問題があるだろ
inoutで受けた変数のオリジナルにアクセスするコードにワーニングぐらい出してくれたら
とも思うけど、まだそこまで面倒は見きれないんだろ
ただ、最適化の恩恵にあずかりたいなら、willSetなんかは入れない方がいいみたいだな
0710デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
垢版 |
2017/05/27(土) 23:07:17.91ID:Hem7AZxu0
>>706
いや最適化だよ
参照渡しにしたとしても、外形的にcopy-in copy-outした場合と全く同じ動作をする場合にだけ、参照渡しに最適化される
ただ、>>696みたいなコード書くとその最適化の前提がぶっ壊れるから絶対するなとリファレンスでも言ってるだけで

リファレンスにはっきりやるなと書いてることをやって壊れたからってそれはプログラマの責任でしょ

まぁ将来的にownershipが入れば>>696みたいなコードもちゃんとコンパイルエラーにしてくれるようになると思うよ
0711デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
垢版 |
2017/05/27(土) 23:47:08.68ID:7vlRlcaj0
willSetがあるとmutating funcもself自体がcopy-in copy-outになった
これもリファレンスのどこかにあるのかな

struct A{
var v = [Int]()
var onAppend: (()->())? = nil
mutating func f() {
v.append(1)
onAppend?()
}
}
do {
var a = A()
a.onAppend = { a.v.append(2) }
a.f()
print("willSetなし", a.v) // [1, 2]
}
do {
var a = A() {willSet{}}
a.onAppend = { a.v.append(2) }
a.f()
print("willSetあり", a.v) // [1]
}

willSetなし [1, 2]
willSetあり [1]
0713デフォルトの名無しさん (ワッチョイ 6b3c-9J/J)
垢版 |
2017/05/28(日) 08:47:45.67ID:tTxkySJm0
>>712
いや挙動的には予想通りだよ
didSetはともかく、willSetの方は呼ばれたコード内では「変更前のオリジナル変数」と「変更後のnewValue」が用意されてるから別の実体作って変更してる
想像だけどinout引数を持つ関数側はバイナリコードレベルでは常に参照で受取るようになっていて
willSetがある変数でmutating funcやinout渡しをすると、呼ぶ側が一時変数作ってそれを渡すコードを生成してると思う

var a = A() { willSet{ } }
a.f() //mutating func f()
   ↓
var a = A()
func a_willSet(_ newValue:A) { }
do {
var tmp = a
tmp.f()
a_willSet(tmp)
a = tmp
}

inoutの場合は a.f()とtmp.f() が f(&a)とf(&tmp)になるイメージ
0716デフォルトの名無しさん (ワッチョイ 9ff3-UHtP)
垢版 |
2017/05/28(日) 11:31:20.31ID:z3zgF0Nw0
mutatingはselfをinoutで渡す
a.f() // これは
A.f(&a)() // これと同じ
なので一般のinout引数と同様にmutatingメソッド内のselfもセマンティクス的にはcopy-in copy-out

ただmutatingが暗黙にselfをinoutで渡すって説明はリファレンスには見つけられなかった
リポジトリのdocsに放り込まれてる文書群ではしばしば言及されてるけど
0717デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/28(日) 12:29:40.83ID:o7LOyvX/0
気軽にプロパティ変えたつもりの1行で、コピーが3回も(うち2回は配列全体のコピー)発生するのね
structのwillSetは曲者だな

struct Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
}

struct Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
}

var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}


monsters[1].weapons[0].name = "Mace"
// output
/*
new weapon name = mace
new weapons = [Weapon(name: "Mace"]
new monsters = [Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]), Monster(name: "Orc", weapons: [Weapon(name: "Mace")]), Monster(name: "Dragon", weapons: [])]
*/
0718デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/28(日) 12:30:23.95ID:o7LOyvX/0
クラスで実装すれば、wellSetあってもコピーはプロバティに対しての一回だけ
class Weapon {
var name: String {
willSet { print("new wepon name = ¥(newValue)") }
}
init(name: String) {
self.name = name
}
}
class Monster {
var name: String
var weapons: [Weapon] {
willSet { print("new weapons = ¥(newValue)") }
}
init(name: String, weapons: [Weapon]) {
self.name = name
self.weapons = weapons
}
}
var monsters = [
Monster(name: "Goblin", weapons: [Weapon(name: "Knife")]),
Monster(name: "Orc", weapons: [Weapon(name: "Sword")]),
Monster(name: "Dragon", weapons: [])
] {
willSet { print("new monsters = ¥(newValue)") }
}

monsters[1].weapons[0].name = "Mace"
// output
/*
new wepon name = Mace
*/
0719デフォルトの名無しさん (ササクッテロル Sp0f-Kfqe)
垢版 |
2017/05/28(日) 12:35:53.43ID:eqNgb5P3p
Swift初期にJavaScriptに似てるからWeb屋が参入してくるとか言ってた人もいたけど全然違うしSwiftはObjective-Cより仕様が複雑になってきたね
でもおかしなコードはコンパイラがビシバシ教えてくれるし仕様を詳しく知らなくてもとりあえずコードを書く事はできるかな?
0721デフォルトの名無しさん (ワッチョイ fb54-WkB/)
垢版 |
2017/05/28(日) 22:35:10.01ID:7/a46AkG0
>>720
俺もSwift難しい。
structにprotocol適用したり、protocol extensionとか。
0725デフォルトの名無しさん (ワッチョイ 7b46-NZKg)
垢版 |
2017/05/28(日) 23:28:56.75ID:6qJqAaY90
SwiftとCのどっちがハードル高いかって言ったらCとは言えないけどな
Cのシンタックスをベースにしてる言語は多いから、初学者にSwiftとC
どっちをやった方がいいかって言われたら間違いなくCだわ
0727デフォルトの名無しさん (ワッチョイ 7b46-sPQt)
垢版 |
2017/05/29(月) 00:25:02.54ID:lFCv8yRy0
Cもわからんようなもやしエンジニアが増えると思うと先が思いやられる
ソフト屋もハードウェアに近いプリミティブな部分の理解は必要なんだけとな
そういう意味でCは高級アセンブラ的なバランスがちょうどいい
0729デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/29(月) 00:47:58.23ID:3RO08/qX0
でも今は簡単なゲーム作りたいとかなら特にポインタの知識なくても作れちゃうからなぁ
初心者にC言語でゲーム作ってだと難しいと思うけど、Swiftなら割と簡単
モグラたたきとかジャンケンゲーム程度なら初心者でも2,3日で作れるかも
0730デフォルトの名無しさん (アウアウエー Sa3f-Kfqe)
垢版 |
2017/05/29(月) 00:57:45.02ID:21264BYsa
誰もポインタないと作れないなんて言ってない。
ポインタの知識はトラブった時にトラブルの原因の候補にメモリが上がるか?どう状態かを推測出来るか?ってのに直結する。
ポインタと言うか、メモリの構造を知らなけりゃトラブルの原因として候補にすら上がらない。
下手すれば永延と原因分からないまま、プログラムは未完に終わる。
0731デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/29(月) 01:03:25.64ID:3RO08/qX0
そんなこと言い出したら究極的にはコンパイラの癖とかハードの特性とかまで知らないとデバッグできないことになる
初心者にそこまで求めるのは余りにも遠い道のりになる
0732デフォルトの名無しさん (アウアウエー Sa3f-Kfqe)
垢版 |
2017/05/29(月) 01:19:59.07ID:21264BYsa
そこまで言わんが、初心者と言えどもCPUとメモリの仕組みは理解してからプログラミングは始めて欲しいものだが。

体験して見たいだけなら兎も角、プログラマになりたいんならね。
0735デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/29(月) 08:51:21.58ID:A7rCPaLD0
>>722
C言語のソースも、人によって全然違うけどなぁ。
とくに、Headerファイルのマクロ定義によってソースの印象がガラッと変わる。
0738デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/29(月) 11:13:19.98ID:A7rCPaLD0
>>733
Kotlin/Nativeなんてのがあるのね!
知らんかった。JVM無しで動くコードが作れるのかな?
0739デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/29(月) 11:14:56.30ID:A7rCPaLD0
It is not a fully functional release yet,

Kotlin/Nativeがどの程度動くのか?気になる。
0740デフォルトの名無しさん (エムゾネ FFbf-4cAo)
垢版 |
2017/05/29(月) 11:27:53.51ID:trx2RJe/F
>>729
ポインタ分からないって人は、参照型の値型の違いが理解出来なくないか?
0741デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/29(月) 12:04:20.43ID:3RO08/qX0
参照型と値型の違いがわからなくても使い方さえ理解できれば簡単なアプリは作れるからな
ある程度の最適化はコンパイラがやってくれるし、ハードの性能も上がってるから、多少の冗長性は無視できる
C言語だとそうはいかない
ポインタを知らないとまずまともなアプリはつくれない
外部のライブラリを利用する場合もポインタの知識は必須になる
ポインタの理解が参照型の理解の助けにはなるだろうけど厳密にはポインタと参照型は同じものでもないし
0742デフォルトの名無しさん (スプッッ Sdbf-4cAo)
垢版 |
2017/05/29(月) 12:14:04.16ID:idSzy2HYd
それは、ポインタを知らなくても使い方さえ覚えれば簡単なアプリは作れる、っていっても同じじゃないか?
0743デフォルトの名無しさん (ワッチョイ df6e-cMFO)
垢版 |
2017/05/29(月) 12:33:55.33ID:3RO08/qX0
ポインタの場合は概念を理解しないで使い方だけ覚えるってのはちと無理がある
Swiftの参照型は概念をきっちり理解できなくても、大概動くものは作れるし、変なことやろうとしてもIDEやコンパイラが注意してくれる
0745デフォルトの名無しさん (スプッッ Sdbf-4cAo)
垢版 |
2017/05/29(月) 13:27:25.51ID:idSzy2HYd
>>744
じゃなくて、ポインタの概念を理解出来ない人は、参照という概念も理解出来ないって言う意味だけど
挙動で理解出来てるなら、それは理解出来る人だよ
0751デフォルトの名無しさん (ワッチョイ 7bf5-vlKO)
垢版 |
2017/05/30(火) 01:08:42.87ID:Q1uksSWN0
iosもandroidも共通で言えることなんだけどさ、もう一段フレームワークが欲しい。どっちもuiライブラリ止まりで、
全体の管理を行う部分が開発者任せで、正直困る。一画面アプリ止まりならそれでもいいんだけどさ。
0756デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/30(火) 10:07:35.91ID:LRk+Le9O0
俺もパッケージマネージャが複数あるのが好かんなぁ。

1. Carthage
2. CocoaPods
3. Swift Package Manager

俺は1.がxcodeprojへの変更が少なくて好みだ。
2.はxcodeprojをどう変更してるのかが、見えない。
0758デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/30(火) 10:53:32.01ID:LRk+Le9O0
Swiftとはちょいと違う事で質問です。
UMLモデリングって最近でも使われますか?
使う目的は何でしょう?

1. すでにあるコードの解析
2. これから作成するコードの可視化
0760デフォルトの名無しさん (アウアウウー Sacf-Evzo)
垢版 |
2017/05/30(火) 11:24:54.00ID:gxWnkgCCa
しかるべきスレへ行ってはどうか
0761デフォルトの名無しさん (スプッッ Sdbf-4cAo)
垢版 |
2017/05/30(火) 12:41:12.92ID:8S4zHXFCd
>>758
モデリングのために決まってんだろ
0762デフォルトの名無しさん (ブーイモ MMbf-vlKO)
垢版 |
2017/05/30(火) 13:35:34.23ID:MeRfIrpoM
>>755
まさにこれ。決めてほしい。
それかアップル自身が公式にリファレンスとなるアプリをオープンソースにしてほしい。
react-nativeだとf8appがそれっぽいが。

なんかそれなりの規模のオープンソースアプリないかな。
0763デフォルトの名無しさん (ササクッテロリ Sp0f-W32U)
垢版 |
2017/05/30(火) 14:59:25.27ID:zOXcPiC1p
swift.orgのPackage Managerのページにゴミのようなサンプルはあるけど
自身(SPM)のことしか考えてないから、自分で作った方が良いだろうねぇ

Swift Package Manager
https://swift.org/package-manager/#conceptual-overview
Package.swift作って、Sources, Testsディレクトリ作る

CocoaPods
https://guides.cocoapods.org/syntax/podfile.html
Podfile作る, Sources/*.swiftを参照

Carthage
https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile
Carfile作る, Sources/*.swiftを参照

Xcode
上の全部を適当にpodが作った.xcworkspaceのプロジェクトツリーに加える
0764デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 11:13:03.77ID:9hyFYnrA0
qiitaのKotlin記事を読んでて出くわしたphrase。

Android アプリ開発者であれば普段から英語を読んでいると思いますし、平易な英語なので大きな問題はないと思います。

俺にはComputer関連の英語文章が難しく感じるのだけど、どうなんでしょう?
exressionを式だと理解するのに、随分時間がかかったと思う。
0766デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 12:45:27.84ID:9hyFYnrA0
たしかに!

順方向伝搬(forward propagation)って書いてあるね。和書には。
expressionを式、statementを文と訳すのは判ったけど、和書には「式文」
ってのが時々出て来て、これ何を翻訳したんだ?

と不安になる。
0768デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 16:13:04.68ID:9hyFYnrA0
>>767
いつも良く使うマッチ式
0769デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 16:16:42.72ID:9hyFYnrA0
regular = いつもの
例:regular customer = 常連、regular coffee = 日々よく飲むコーヒー

regular ¥= 正規 = formal, proper
0770デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 16:19:06.25ID:9hyFYnrA0
正規表現って訳語は、誤訳だわぁ。
0771デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 16:19:30.13ID:9hyFYnrA0
誤訳を永遠と使い続けるのは、よく無い。
0773デフォルトの名無しさん (ワッチョイ fbf3-Y9+t)
垢版 |
2017/05/31(水) 16:37:31.63ID:9hyFYnrA0
>>772
まあ、情報が入手しずらい時代に苦心して日本語を当てたって感じだ。

Microsoftの文書を読んで、まったく意味がわからんかったのを思い出さしてクレルわぁ。DAO ActiveX Library, RDO ActiveX Libraryに関しての記述を読んで、
さっぱり意味不明だった。和文も、英文も。

サンプルコードを見たら一発で理解できた。
0774デフォルトの名無しさん (スッップ Sdbf-fYd5)
垢版 |
2017/05/31(水) 19:53:48.08ID:3T0UNs5qd
>>771
じゃあ
リベンジ:復讐
を、なんとかしてよ。

あとfeatureをフューチャーって発音するのもなんとかして欲しい。
0776デフォルトの名無しさん (ワッチョイ 9f72-p7jx)
垢版 |
2017/05/31(水) 21:26:00.22ID:DggZESjQ0
>>750
Swiftより簡単なの?
0777デフォルトの名無しさん (ワッチョイ fb54-WkB/)
垢版 |
2017/05/31(水) 21:33:41.18ID:Iu1e43xk0
>>750
知ったか
0783デフォルトの名無しさん (ワッチョイ b9f3-O++a)
垢版 |
2017/06/01(木) 10:35:07.17ID:Mc77jWtu0
>>782
糞に見えるのなら、三流エンジニアだな。使いこなせない事を棚に上げて、悪態ツイテルだけにしか思えん。
一体どこが糞なんだ?
0784デフォルトの名無しさん (ワッチョイ 353c-2/Qz)
垢版 |
2017/06/01(木) 10:53:52.60ID:kPS6C5Z/0
SwiftとKotlinでちょっと遅延評価リストを比較した

■Kotlin
オンラインコンパイラ: https://try.kotlinlang.org/

val a = generateSequence(0){it+1}

//A 問題なし
println("A: "+ a.take(10).toList() )

//B 問題なし
println("B: "+ a.take(10).map{it*10}.toList() )

//C 問題なし
println("C: "+ a.filter{3<it}.take(10).toList() )

//D 問題なし
println("D: "+ a.map{it*10}.take(10).toList() )

//E 問題なし
println("E: "+ a.map{it*10}.filter{50<it}.take(5).toList() )
0786デフォルトの名無しさん (ワッチョイ 353c-2/Qz)
垢版 |
2017/06/01(木) 10:55:55.93ID:kPS6C5Z/0
■Swift
オンラインコンパイラ: https://swift.sandbox.bluemix.net/

extension Sequence { var array:[Iterator.Element] {get{return map{$0}}} }

let a = sequence(first:0){$0+1}

//A 問題なし
print("A:", a.prefix(10).array )

//B 問題なし
print("B:", a.prefix(10).map{$0*10}.array )

//C 死ぬ
print("C:", a.filter{3<$0}.prefix(10).array )
//C-2 lazy付けたら動く
print("C:", a.lazy.filter{3<$0}.prefix(10).array )

//D 死ぬ
print("D:", a.map{$0*10}.prefix(10).array )
//D-2 lazy付けてもコンパイル不可
print("D:", a.lazy.map{$0*10}.prefix(10).array )

//E
print("E:", a.map{$0*10}.filter{50<$0}.prefix(5).array )
//E-2 lazy付加+分割で何とか動く
do {
let a2 = a.lazy.map{$0*10}
let a3 = a2.filter{50<$0}
print("E:", a3.prefix(5).array )
}
0787デフォルトの名無しさん (ワッチョイ b9f3-O++a)
垢版 |
2017/06/01(木) 11:22:30.68ID:Mc77jWtu0
>>786
THX

無限個Sequenceを扱う時には、気をつけます。
0791デフォルトの名無しさん (ワッチョイ b9f3-O++a)
垢版 |
2017/06/01(木) 13:30:11.13ID:Mc77jWtu0
>>788
//print("D:", a.map{$0*10}.prefix(10).array )
print("D:", a.map{($0 as Int)*10}.prefix(10).array )

=> D: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]

修正したらambiguous言わなくなったけど、なんでだ?
0801デフォルトの名無しさん (ワンミングク MM7a-sYLo)
垢版 |
2017/06/06(火) 09:25:05.11ID:qDrcxP3vM
2017/05/26 改正民法が成立、「瑕疵担保責任」などシステム開発契約に影響大
欠陥に気付いた時点から1年以内にITベンダーに通知すれば、通知後5年以内は修正や報酬の減額などを求めることできる

Swift3でシステム作って納品する

iOSバージョンが12になる。Swift4が必須になる

客がプロジェクトファイルからアップデート試す。Swift4の必須のエラーが出る。動作の不具合に気づく

気付いた時点から1年以内に通知すれば、5年間無料保証ゲット

つまりSwiftがアップデートするたびに、無償の修正作業を発生するということかな
0802デフォルトの名無しさん (ササクッテロリ Sp3d-c8bI)
垢版 |
2017/06/06(火) 09:57:12.15ID:LrtFpx4Mp
> iOSバージョンが12になる。Swift4が必須になる
ダウト
中途半端な知識でモノを言うもんじゃねぇよww

なお、小賢しいPMはSwiftバージョン上がる度に
最新のXcodeでビルドできないのはアポーのせいなんでwwwってメンテ工数をぶん取る模様
0803デフォルトの名無しさん (ワンミングク MM7a-sYLo)
垢版 |
2017/06/06(火) 10:07:42.01ID:qDrcxP3vM
それはお前が決めることじゃない。コンペで「今後欠陥に気付いてから5年間無料保証を請け負うお」を提案できる会社だけが仕事を取れることだけのこと

コンペで競争がおき、それを提案できる会社が出てくるから、それが慣習化していくよ。法でデフォルトで定められた無限保証をわざわざ有限保証にするバカはいない。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況