トップページ⇒tech
1002コメント383KB

Swift part9 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8b3c-/6Y/)2016/10/18(火) 11:34:44.16ID:oLo879ze0
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

関連スレ

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

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

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

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

前スレ
Swift part8
http://echo.2ch.net/test/read.cgi/tech/1463149806/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0404デフォルトの名無しさん (ブーイモ MMff-S2pU)2017/01/05(木) 17:18:55.89ID:oFOZ2y/SM
いっそのことrustを採用してくんないかな、iphoneのためだけに新言語とかめんどい
0405デフォルトの名無しさん (ワッチョイ dfc9-f1yY)2017/01/05(木) 17:32:58.79ID:sWdRcuvD0
それいっちゃRustはFirefox書き直しのためだけの新言語なんだが…
0406デフォルトの名無しさん (スップ Sdff-oQtP)2017/01/05(木) 18:22:18.82ID:YNtiq33Od
>>404
ほんとこれ
0407デフォルトの名無しさん (ブーイモ MM3f-twlg)2017/01/05(木) 20:45:21.20ID:P+GiqLXdM
>>403
0408デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/05(木) 20:47:15.64ID:zjhRqjNop
rustはiOSで使えるクロスコンパイラが公式提供されてるんだから使えば?と思うけど
それはそれとして、 swiftがヤならobjcでいいじゃん、、、
どっちもイヤならアポー端末を諦めろというね
0409デフォルトの名無しさん (ワッチョイ 0f42-HvS5)2017/01/05(木) 21:15:32.68ID:P4uSEloo0
Swiftオープンにするっていってたやん!
0410デフォルトの名無しさん (ワッチョイ 0fba-oQtP)2017/01/05(木) 21:58:08.24ID:jBQh1CN00
オープンにしただろいい加減にしろ
0411デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)2017/01/06(金) 00:00:22.89ID:bcUwFgd80
iPhone(Apple)専用言語という意味ではObj-CもSwiftも一緒だけど
初めて学ぶ言語ならObj-Cの方がCの勉強にもなるからSwiftより断然まし
SwiftはObj-C以上に排他的変態的シンタックスだから初学者には
やっぱり個人的にはお勧めできないわ
0412デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/06(金) 00:22:09.68ID:Y1Cw0qRA0
排他的変態的シンタックスってどの辺のこと言ってるの?
そんな特殊だと感じることはないんだが

Objective-Cに比べると格段にタイプ量が減って見た目もスッキリするから
個人的にはそれだけでも大きなメリット
0413デフォルトの名無しさん (ワッチョイ 1b66-SevC)2017/01/06(金) 00:28:39.65ID:BpurgW/q0
>タイプ量が減って
職業プログラマ特有のこの価値観がもうゲロ出るぐらい嫌い
0414デフォルトの名無しさん (ワッチョイ dfc9-f1yY)2017/01/06(金) 00:33:12.22ID:PzH0fr810
Swiftが排他的変態的とか他の言語知らなさすぎるだけだろ
プログラマとして勉強不足なのバレバレだぞ
0415デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/06(金) 00:33:15.56ID:Y1Cw0qRA0
はあそうか
タイプはXcodeが補完してくれるから実質的にはそこまでの違いはないかもしれないんだが
文字を読む量が違うんだよ でそれはバグの量に直結するかんね
0416デフォルトの名無しさん (ワッチョイ 1b66-SevC)2017/01/06(金) 00:50:24.79ID:BpurgW/q0
>文字を読む量が違うんだよ でそれはバグの量に直結するかんね
はぁ。
あなたは一生work1にwork2から変数A1を代入してこれでバグが少ない!とほざいててください。それでいいよ
0417デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/06(金) 01:05:43.98ID:/fM3tdtK0
タイプ量の少なさは職業プログラマ云々より
関数型言語界隈からの価値観というか流れでは
0418デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/06(金) 01:57:40.55ID:Y1Cw0qRA0
>>416
読む量が減ればバグが減るって言ってるのに増やしてどうすんねんw
0419デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/06(金) 01:58:56.36ID:Y1Cw0qRA0
workなんて言葉久しぶりに聞いたけど
今でも普通に使われてる言葉なの?
0420デフォルトの名無しさん (ワッチョイ dfc9-6vgr)2017/01/06(金) 02:18:34.24ID:EL7IyQQ80
>>404
同意
0421デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/06(金) 07:52:01.44ID:Q/mvZ92R0
>>389
>>390
お前良い奴だな
なかなかいい学習ノウハウだ

おれRuby勉強した時は良質なxx写真がアップされているスレを解析して
スレ内のURLから写真を片っ端からダウンロードするプログラムを書いたな

そう言えば大学院の先輩に英語の速読できるようになりたいと聞いた時の回答は「Hな本読むといいです」だった

つまりエロ最強!
0422デフォルトの名無しさん (スプッッ Sdff-B9xl)2017/01/06(金) 12:21:21.27ID:RUdDycfgd
>>415
そう、冗長だと見通しが悪すぎる。
半分はライブラリ設計のせいで、残りはc言語のせいの気もするけど。
0423デフォルトの名無しさん (ワッチョイ bb10-51vH)2017/01/06(金) 19:38:50.74ID:Gq0Nc1/d0
Obj-CのNSArrayとかNSDictionaryのシンタックスシュガーなかったころはマジで横長になりすぎて読みづらかったけどね。
同等のJavaのコードに比べて、単に配列から値を取り出してるだけの行も複雑な命令を実行してる行も同等に横いっぱいになるから飛ばし読みがしづらくてしっかり読む必要があった。
わけのわからない変数名や関数名をつけて短くていいよねみたいな話ではないよ。BASICとかの時代じゃないんだからさぁ。
0424デフォルトの名無しさん (ワッチョイ 2b0c-tEgc)2017/01/07(土) 00:28:19.84ID:DNozFqRa0
ポインタ周りをもうちょっとC寄りにしてくれたらなぁ。

別ファイルで objc コード書くと見通し悪いから、Swift に局所的に objc コード埋め込めたりすると面白いかな、
C#のunsafeとか __asm {} みたいに。欲を言えば言語指定クロージャみたいな感じ
0425デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/07(土) 08:53:14.57ID:4HC1Pjzk0
>>424
それじゃwithout cにならないべ
0426デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)2017/01/07(土) 08:55:58.44ID:72YrLFZp0
だからwithout Cにする意味がないんだって
0427デフォルトの名無しさん (ササクッテロリ Sp3f-L2iV)2017/01/07(土) 08:57:56.42ID:182Vw6zJp
それこそ可読性が悪いソースになりそう
0428デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/07(土) 09:19:02.71ID:OQtShFizp
HTMLの中にプログラム書けると可読性よくね? > PHPスゲー

なお、現在は、、、
0429デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)2017/01/07(土) 09:31:45.95ID:72YrLFZp0
「無駄に」without CなSwiftならではの悩みだな
0430デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/07(土) 09:37:34.24ID:iBRfuxUXa
可読性を犠牲にしてまでもSwiftのソース中にCのソース埋め込めたらなぁ
って思う時って例えば具体的にどういうケースなんだろ
ただ単にC言語に慣れててすぐ書けるからってことじゃないよね?
0431デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/07(土) 12:02:53.35ID:OQtShFizp
>>424はSwift中にCが書けると可読性良くなると思ってるから質問に答える人がいない

一応、UnsafeMutablePointerを操作するよりはCの生ポインタ操作出来る文法が楽ってのはあるけど
Swiftでポインタ操作が必要なら自前ラッパーAPIで隠蔽して上位レイヤーでは気にしなくて済むようにするよ
0432デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)2017/01/07(土) 12:17:38.95ID:72YrLFZp0
細かい操作を実装できるCの柔軟性は強いよね
Obj-Cなら何も考えずそのまま実装できたことをSwiftでやろうとした時
どうするかって話だね
without Cを高らかに謳っているのだから仕方ないね
頑張ろう
0433デフォルトの名無しさん (オッペケ Sr3f-6vgr)2017/01/07(土) 17:26:53.31ID:UVIgJaZNr
>>430
システムコール使うときとか?
0434デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 17:53:33.27ID:p94OVxAQ0
別スレで話に上がってたけど
ファイルを行単位で読んで処理しようとする時とか
CのAPI使ったほうがスッキリ書けたりするケースがあるんだよね
http://stackoverflow.com/a/24669956/1000690
0435デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/07(土) 18:02:35.45ID:hf6ybaU+a
>>434
でも、それ別ファイルにCで記述して、Swiftから呼ぶようにした方がメンテナンス性あるんじゃね?
0436デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/07(土) 18:34:39.92ID:OQtShFizp
CR, LF, CRLFを認識出来てないそのコードは危なかろうて
回答上位にある汎用クラス作って云々が良いとも思わないけども

そういうフォローをちゃんとした単純関数で実装したらCでもSwiftでも大して変わらんよな
、、、Swiftなら全データをStringに突っ込んで、改行文字でsplitとか乱暴するのも一興か
0437デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 18:52:21.07ID:p94OVxAQ0
>>435
どうだろうね?
別ファイルにしてAPIのインターフェース考えて実装してメンテナンスしていく手間をかけるだけのメリットがあるのかどうかによるよね

>>436
メモリのフットポイントを気にしないならSwiftでもそう変わらないだろうけど
気にするならNSDataとかで処理しないといけないからSwiftのほうが面倒だと思うよ
0438デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/07(土) 19:10:10.76ID:IyWm4kw10
この手のはアドホックなことせずに
バイトストリーム、キャラクタストリーム, レキサー/パーサーに分けて繋げた方が後が楽だと思う
0439デフォルトの名無しさん (ワッチョイ 2bf8-+flj)2017/01/07(土) 20:04:55.49ID:Gk0CJ/2J0
>>434
CのAPIの方が簡単と言うのはプログラマが担保しなきゃいけない安全確認とかを全部すっ飛ばして書けるからであって

必要な安全性を確保しながらコード書くならSwiftの方が簡単だよ
0440デフォルトの名無しさん (ワッチョイ 6fa2-+flj)2017/01/07(土) 20:37:16.77ID:w3Yo/XU60
withoutCマンセーと言われましても
SIMD使う時とかはしょうがないよね?

そういうケースが稀なのは認める。
0441デフォルトの名無しさん (ワッチョイ dfc9-f1yY)2017/01/07(土) 20:48:06.16ID:eRueAzeT0
without CはSwift単体の文法の話であって、別にCとの適材適所・協調/協働を否定する標語では全くないのにわざと混同してる奴がいるな?
0442デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/07(土) 20:52:00.96ID:UTTve38fa
>>437
別ファイルにするにしても、同一ソース内に埋め込むにしても、データ受け渡しのためのインタフェースは考えないといけないだろ
0443デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 21:18:40.07ID:p94OVxAQ0
>>439
そういうケースもあるだろうけど例として上げたケースは
用意されてるCのAPIを使うかSwiftで自作のAPIを作るかの違い

>>442
コード見たの?

import Darwin
let bufsize = 4096
// let stdin = fdopen(STDIN_FILENO, "r") it is now predefined in Darwin
var buf = UnsafePointer<Int8>.alloc(bufsize)
while fgets(buf, Int32(bufsize-1), stdin) {
print(String.fromCString(CString(buf)))
}
buf.destroy()
0444デフォルトの名無しさん (スププ Sdff-+flj)2017/01/07(土) 21:48:31.26ID:A7PZcJW4d
>>443
>用意されてるCのAPIを使うかSwiftで自作のAPIを作るかの違い

そこに「用意されているSwiftのAPIを使う」と言う選択肢がないのがおかしくないかい?

SwiftならファイルパスでStringを初期化してenumrateLinesするだけでいいから
CのAPIでゴチャゴチャ作るよりはるかに簡単で安全だよ?


例えばあなたが>>443の下部で引用しているCの関数を使った例では
バッファサイズとして4096を取っているから
一行が4095文字以上の入力を受けると正しく動作しなくなっちゃうよ
この制限をC言語で解決するのは結構面倒くさいよ
0445デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/07(土) 21:49:05.59ID:UTTve38fa
>>443
コード見たよ
で?
0446デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 21:55:01.67ID:p94OVxAQ0
>>444
>SwiftならファイルパスでStringを初期化してenumrateLinesするだけでいいから

それメモリに全部読み込んでるでしょ?
極端な例だけど300MBのファイルだとして全部最初にString化するの?
0447デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 21:55:42.79ID:p94OVxAQ0
>>445
見てて>>442みたいな考えなら特に言うことはない
0448デフォルトの名無しさん (スプッッ Sdff-GcKO)2017/01/07(土) 22:12:08.42ID:DTtrdLJ+d
>>434
「ファイルを行単位で読んで処理しようとする時とか」の「とか」は、「ファイルを行単位で読んで処理しようとする時」以外の何?

>>439
「プログラマが担保しなきゃいけない安全確認とか」の「とか」は、「プログラマが担保しなきゃいけない安全確認」以外の何?


そんな「とか」の使い方じゃ、まともな仕様は作製できない。
0449デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/07(土) 22:21:44.29ID:IyWm4kw10
研鑽兼ねて>>438で書いたこと自分でやってみた
http://swiftlang.ng.bluemix.net/#/repl/5870e7500f558d57abf31839
・セル内の改行に対応
・パイプライン的に処理(バッファ境界でUTF8が破断することも無し)
・改行コードはちょっと端折り
0450デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/07(土) 23:25:32.71ID:4HC1Pjzk0
>>448
残念ながらこれは仕様書ではない

安全確認以外の何かを明確にするにはまず安全とは何かを定義しなければならないが
それを定義にするのは本来の議論の範囲外であり、
議論の本質の理解の妨げになるためあえて定義を行わなかった

そこで、明確に定義されていないことを明確に示すために「とか」を用いている


そう言うことを聞きたいわけ???
0451デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/07(土) 23:32:17.40ID:p94OVxAQ0
>>449
超できる子だな

Swiftのシーケンスって読み終わったところからメモリ開放されるのかな?
そうじゃなければ別途chunkに分割しないと全処理時は最終的にメモリに乗るよね
0452デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/07(土) 23:54:15.55ID:PPvI4deGp
出来ない子だな、お前は教えて君か
0453デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/07(土) 23:55:36.10ID:IyWm4kw10
>>451
Iteratorのクロージャが強参照してるもの以外は順次開放されるよ
UTF8デコーダと内部バッファ(4バイト?)、字句解析用の変数(end,hold)、
1レコード分(row:[String])がメモリ消費する

Array(parseCsv(...))すると全部抱えてしまうのでforEachで1レコードずつ処理する必要はある
0454デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/08(日) 00:11:05.12ID:JrkgmnK40
あと filePath → AnyIterator<UInt8>
http://swiftlang.ng.bluemix.net/#/repl/587104360f558d57abf31847
0455デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/08(日) 00:46:34.89ID:9hp7bz6e0
>>453
そっかありがとう

>>454
すげーな 超参考になる
ファイル読み込みはchunkでやるけどあとはバイトストリームで処理できるから境界の心配しなくていいのね
こういうシーケンス使った考え方を知るのになんかオススメの本とか資料とかもしあったら教えて
Swiftじゃなくてもいいので
0456デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)2017/01/08(日) 09:45:34.32ID:qkk6ZrX+0
->って何?アロー演算子ですか?^^
0457デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/08(日) 10:12:37.73ID:JrkgmnK40
>>455
今ググって見つけたページではあるけど、こういうから知識を拾っておくと良いかも
http://hexadrive.jp/hexablog/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/12405/
http://ufcpp.net/study/csharp/da_about.html
http://postd.cc/pipes-and-filters/
の前半あたり
http://www.aerith.net/design/Decorator-j.html

切り分け方は先人に学ぶ感じで
http://kmaebashi.com/programmer/devlang/yacclex.html
https://msdn.microsoft.com/ja-jp/library/cc351995.aspx

用語バラバラだから似てるもので並べると
Swift3のSequence(2のSequenceType) ≒ AnyIteratorを返す関数
≒ JavaのIterable ≒ Pythonのジェネレータ ≒ C#のイテレータブロック/IEnumerable

Swift3のIteratorProtocol(2のGeneratorType) ≒ AnyIterator
≒ JavaのIterator ≒ Pythonのイテレータ ≒ C#のIEnumerator

※AnySquence, AnyIteratorはジェネリクス対応用(型消去法)
0458デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/08(日) 17:36:54.12ID:9hp7bz6e0
>>457
ありがとう
心のなかでマスター先生と呼ばせてもらうよ

素養が違うからか教えてもらった記事からだとマスター先生の考え方に近づけそうにないんだが
もう少し頭のなかをストリーム化できるように日々修行するわ
0459デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/08(日) 17:40:12.38ID:9hp7bz6e0
>>456
関数の戻り値の型

func greet(person: String) -> String {…}
↑Stringを返す関数
0460デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/09(月) 00:00:23.02ID:eHS8l2Ef0
>>446
300MByteなら躊躇せずオンメモリで処理するかな?
1GByteならちょっと悩んでストリーム処理にするけどそれは実際に1GByteのファイルを喰らってから考える
遅くなるだけで処理としては破綻してないし

enumerateLinesでイテレート処理してれば
ストリーム処理にする場合でも行単位で文字列を取り出せるイテレータを定義するだけで
後段はそのまま使えるから移行は比較的楽

逆に
Cの関数で4095バイトとかバッファサイズで打ち切られちゃうと
4095文字以上の行に対応させるには
バッファの確保やマルチバイト文字の整合性とか色々考えるのが面倒


要するにCで書いてもSwiftで書いても簡単に書けるのは入門書のサンプルプログラムレベルのもので
細かいチェックを入れるとどちらもそこそこ書き込みが必要

その上で
1行が4095文字を超えると破綻するCの関数がいいと思うか
巨大ファイルを渡されると処理速度が遅くなる可能性のあるSwiftの標準関数を使うか
と言うだけの話だと思うよ

で、Swiftでプログラム書いてる途中でこの処理が必要なら
俺ならSwiftで書く方を選ぶと思う
0461デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/09(月) 00:13:07.51ID:vNdwgc8fa
Perl最強


#!/usr/bin/env perl
while (<>) { print; }
0462デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/09(月) 00:18:04.60ID:vNdwgc8fa
shellと組み合わせれば無敵
ちょっとした変換も簡単実装

cat lower.txt | perl -e 'while(<>) { print uc; }' > upper.txt
0463デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/09(月) 00:57:25.52ID:JTALZxOQ0
>>460
1GB使ったらiPhone6以下なら毎回クラッシュだよ
メモリの使用量を抑えつつ巨大なテキストファイルを読み込む時にどう処理するかって時の例だから
そこをすっ飛ばしたら意味ないがな

>Cの関数で4095バイトとかバッファサイズで打ち切られちゃうと
バッファサイズは状況に応じて変更すればいいでしょ?
それに本当に必要なら読み込んだバッファの最後の文字が改行じゃなければ次を読み込んで足してから処理すればいい
個人的にはそういう処理が必要になるようなケースには出会ったことがないけど

NSStream+NSDataとかでも同じことできるんだけど少し余計に手間がかかるから
Cを選ぶ人がいてもいいんじゃないかって話だ
0464デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/09(月) 01:06:52.96ID:vNdwgc8fa
まぁ、データの入力ミスとか、誤ってバイナリデータ読ませちゃうこともあり得るからな
0465デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/09(月) 01:26:40.47ID:eHS8l2Ef0
>>463
>バッファサイズは状況に応じて変更すればいいでしょ?

プログラムはどうやって状況を判断するんだ?
日本語の小説流し込んだら簡単に1行がメガバイト単位になるぞ?
0466デフォルトの名無しさん (ワッチョイ 0fba-oQtP)2017/01/09(月) 02:22:19.00ID:9ACblGiY0
まとめられててワロタ
0467デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/09(月) 04:04:22.01ID:JTALZxOQ0
>>465
別スレで質問してた人?
バッファサイズ考えるより前にそのファイルの入手方法を考えなおしたほうがいい気がするが
0468デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/09(月) 11:54:09.06ID:eHS8l2Ef0
>>467
>別スレで質問してた人?

違うよ

単に俺(>>467)が>>434に難癖つけてるだけだよ

Cで書いた方が簡単な事もあるの例に
文字列I/Oって言う危険物を持ってきた上で
安全チェックもしてないコードを引用して、ほらCで書いた方が簡潔でしょ?
と言う論調がおかしいと思ったんで噛み付いてる

確かにCで書いた方がいい事もいっぱいある
だけど少なくともI/Oとか文字列処理とかC言語の中でも1番の危険物を持ってきて
危険だと言うことを知らせずにCで書いた方が簡単な例に上げるのはどうかと思うよ

こう言う危険性もあるけど、swiftからcの関数を呼び出せばこう言う書き方も出来るよ程度にしておいて欲しい
0469デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/09(月) 11:55:28.60ID:eHS8l2Ef0
>>468
すまんあんかミス

>単に俺(>>467)が>>434に難癖つけてるだけだよ
おれは>>465ですた
0470デフォルトの名無しさん (ワッチョイ 7bcf-q3aP)2017/01/09(月) 12:49:46.11ID:4OeNzyzM0
>>468
入力が固定されてるなら問題ないと思う
0471デフォルトの名無しさん (ワッチョイ 5f93-+flj)2017/01/09(月) 13:58:21.90ID:eHS8l2Ef0
>>470
ファイル入力で常にこちらの思い通りのデータしか来ないことを想定するの?

入門書のチュートリアルならそれでもいいけどさ

入力データをこちらで決める事ができるなら
JsonとかXMLとかRealmとかのこなれたライブラリが存在するファイル形式を採用する方がいいと思うよ

そんなことを考えるとswiftの中でcを直接使うことの優位性はあまり無いと思うんだ
0472デフォルトの名無しさん (アウアウカー Sa3f-7kys)2017/01/09(月) 14:53:15.83ID:C7tBzNeYa
オートレイアウト使ってるやつなんているのかな?まじでゴミだと思うんやが
0473デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/09(月) 15:21:45.24ID:abgacrATa
まぁ、ほぼC言語使えるんだけどね
書き方の慣れの問題だけで

let lineSize = 1024
if let file = fopen(filePath, "r") {
 let data = UnsafeMutablePointer<Int8>.allocate(capacity: lineSize)
 defer {
 data.deallocate(capacity: lineSize)
 }
 while((fgets(data, Int32(lineSize), file)) != nil) {
  if let str = String(utf8String: data) {
   print(str)
  }
 }
}

>>472
バリバリ使ってるよ
0474デフォルトの名無しさん (スッップ Sdff-GcKO)2017/01/09(月) 15:25:37.56ID:ynBqv2kkd
>>472
中上級の奴が使いたがるんだよね。
で、viewDidLoadで、IBOUTLETのframeいじって「変わらない!Xcodeのバグだっ」て騒ぐんだよね。

お前が世の中のバグだから。


ライフサイクル解らないグズだから。
0475デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)2017/01/09(月) 15:32:05.60ID:rN+gQaLTp
>>473
乙

なんか長文くんまで現れてやってたけど結局これよな
しかし UnsafeMutablePointer を let 宣言できるのが相変わらずキモい
特別扱いできないものかねぇ
0476デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/09(月) 17:35:13.39ID:JTALZxOQ0
>>468
そっか別人か
そのメガ単位で改行されてないテキストファイルって一般的なの?
平均3バイト/文字としても3MBで100万文字だよ?

fgetsやfscanfと同じ機能を持つAPIは今のところSwiftにはなくて
同じようなことをしようとするとどうしても結構な量のコードを書く必要があるから
CのAPIを使いたい場合の例として>>434を上げた

UnsafePointerを扱うってことは
メモリ周りで問題を引き起こすコードを書く危険性が高まるってことだからそこを天秤にかける必要性はわかる
ただそれ以外の安全チェックとか危険性とか言ってる部分はSwiftなら全部面倒みてくれるわけではないよね
0477デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/09(月) 17:49:07.80ID:JTALZxOQ0
>>465
別人だってことなので一応この質問に答えとくと
プログラムで扱うファイルの1行の最大長が予測可能な範囲にあるならそれに応じてサイズ変更すればいいって意味ね
そうじゃないなら>>463に書いたようにバッファ内に改行があるかどうかをチェックして複数回バッファ読んでから処理する
この辺はC使っても使わなくても同じ

100MBを超えるようなテキストファイルってログファイルくらい処理しかないから発想が貧弱なのかもしれないけどね
0478デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)2017/01/09(月) 17:51:25.34ID:LuXubKyCp
データ受け渡しのためのテキストファイルに改行コードいれるかどうかは設計者の決めることだからなぁ
0479デフォルトの名無しさん (スッップ Sdff-GcKO)2017/01/09(月) 17:58:25.64ID:ynBqv2kkd
>>477
ログ以外だと、何かのデータファイルをCSVで書き出したケースも考えられる。
過去やったのだと、クイズを出すアプリで、問題をひたすらテキストファイルで持っていた。

でも、移動体端末で、でかいファイルを処理するのって、基本的なarchitectureを考え直した方が良い気がする。
0480デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/09(月) 18:09:09.39ID:JTALZxOQ0
>基本的なarchitectureを考え直した方が良い気がする。
100%同意
iOSならテキストデータのインポート・エクスポート時が一番のユースケースだろうね
0481デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)2017/01/09(月) 18:49:37.59ID:LuXubKyCp
htmlもxmlもJSONも改行コードは必須じゃないからなぁ
0482デフォルトの名無しさん (ワッチョイ 5b3c-GcKO)2017/01/09(月) 19:35:52.53ID:Mfdzy40n0
>>480
まあ、
>>477
さんの言う通りログなら仕方ないんだけれどもね。

ただ、そんなデカイログを端末で見るというarchitectureが・・・以下自粛。
0483デフォルトの名無しさん (ササクッテロロ Sp3f-+flj)2017/01/09(月) 19:38:32.72ID:uxZFBykMp
Autolayoutが使えないのは論理的思考の出来ない馬鹿
あんなもん設定した通りの優先順位付けで表示されるだけだろ
0484デフォルトの名無しさん (ワッチョイ 0f7b-MPfw)2017/01/09(月) 23:59:11.54ID:qvjxruLM0
ログなんて、圧縮するだろ

JSのファイルでも、Minify とかで圧縮する
0485デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/10(火) 00:08:49.29ID:qN25f4rba
それがどーした?
0486デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)2017/01/10(火) 09:52:08.69ID:0L0fi+PIp
CとSwiftでraw文字列の読み込みの実装難易度が違う
って話だったのに、データ構造だのAuto Layoutだのを議論しててワロタ
0487デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/10(火) 10:27:31.44ID:hQEZjrPha
初心者かな
話が飛ぶのは2chではよくあることだから
0488デフォルトの名無しさん (スプッッ Sdff-oQtP)2017/01/10(火) 10:40:39.28ID:L0gptR0Sd
で?
0489デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)2017/01/10(火) 10:53:58.04ID:FDJAHjJcp
ん?
0490デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)2017/01/10(火) 10:56:22.37ID:0L0fi+PIp
>>487
お前バイク板住民かよぉ
(今もあそこがアレな板なのかは知らん)
0491デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)2017/01/10(火) 11:17:06.45ID:FDJAHjJcp
最初は文字列の読み込みうんぬんというより、インラインでC言語を記述したいって話じゃなかったっけ?
で、そのあと、具体例として、ファイル読み込みの話になって、C言語で書いても可変サイズの行だと面倒じゃね? という話になって、そっからデータ構造の話に発展して、どさくさ紛れに、Auto Layoutの話を入れてくるKYが現れて、ってのがここまで流れだと思ったが...
まぁ、別に同じスレッドで違う話題を同時に扱うなって決まりはないしな
0492デフォルトの名無しさん (ワッチョイ df2b-vyGv)2017/01/10(火) 11:44:11.95ID:nWa+BtAl0
プログラム技術@2ch掲示板
> ネタ、板とは関係の無い話題はご遠慮ください。

決まりはあるんだけどな
Inline C in Swiftはネタ(当人はマジの様子)だけど、それ以降はSwiftに絡めたネタも少なく・・・
データ構造やAutoLayoutを話すのはいいが、ネタとしてSwiftを絡める努力をしよう(他人事
0493デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/10(火) 11:56:12.46ID:1oVGbtNGa
プログラム技術板で、データ構造やAPI絡みの話を交えるなっつうのは頑固すぎるわ
AutoLayoutに至っては4レスあっただけなのに
Swiftと全く無関係ってわけでもないやろ
0494デフォルトの名無しさん (スププ Sdff-+flj)2017/01/10(火) 12:28:56.18ID:VHs9RTlPd
Swiftでファイルダンプするだけならこれで良くね?

while let l = readLine() {
print( l )
}

ただしファイルを標準入力にリダイレクトしておく

FileHandleにreadLineが定義されていないのが謎
0495デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)2017/01/10(火) 12:35:10.25ID:0L0fi+PIp
イマドキのAPI設計的にはFileHandlerと切り離したReaderがあるんじゃね
SwiftのCoreAPIにReaderがないのは3rd party libにぶん投げしてる気がする
0496デフォルトの名無しさん (ワッチョイ dfc9-f1yY)2017/01/10(火) 14:03:45.11ID:8RubTyxI0
Foundationが貧弱なのが悪い
0497デフォルトの名無しさん (ワッチョイ 7bcf-q3aP)2017/01/10(火) 14:08:24.18ID:s989ZmsY0
>>481
昔の2ちゃんのhtml思い出した
0498デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/10(火) 15:07:36.80ID:tt6nQotl0
型推論ネタ, 以下Aは動くがBはmapに呪いが掛かってしぬ

// A
let s = sequence(first:0){$0+1}
.lazy
.map{$0*2}
s.prefix(10)
.reversed()
.forEach{print($0)}

// B
sequence(first:0){$0+1}
.lazy
.map{$0*2}
.prefix(10)
.reversed()
.forEach{print($0)}
0499デフォルトの名無しさん (ワッチョイ df3c-FtWv)2017/01/10(火) 17:22:06.72ID:PjuH0Yrh0
Bでも型指定すればいいのかもしれんがどうやって指定すればいいのか分からない
こういうの普通に動くようになって欲しいね
他言語だと問題なく動くケースのような気がする

(->> (iterate inc 1)
(map #(* 2 %))
(take 5)
(reverse)
(map println))
0500デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)2017/01/10(火) 17:34:25.49ID:0L0fi+PIp
関数型()にかぶれた可読性のないコードだと思った(コナミカン

関数型言語なら文化に合ってるんだろうけどSwiftで書くコードじゃねぇ
もっと読みやすい書き方あるだろとコンパイラ以前に、人間様がコードレビュー時に発狂したい
0501デフォルトの名無しさん (スッップ Sdff-+flj)2017/01/10(火) 17:46:11.19ID:IYumFm2zd
>>494
よし、これならcを使った方が簡単に書ける例として文句無かろう

import Foundation

guard let fh = FileHandle(forReadingAtPath: "xxx"),
dup2(fh.fileDescriptor, 0) != -1 else {
fatalError("file/dup error")
}

while let line = readLine() {
print(line)
}
0502デフォルトの名無しさん (アウアウウー Sa3f-yz8t)2017/01/10(火) 17:51:57.47ID:aMk4PEuoa
先にprefixすればいいんやで

sequence(first:0){$0+1}
.prefix(20)
.map{$0*2}
.reversed()
.forEach{print($0)}
0503デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)2017/01/10(火) 18:00:07.10ID:tt6nQotl0
>>502
処理順を入れ替えられる例を出してすまん
map→filter→prefixのような場合は対応出来ない
■ このスレッドは過去ログ倉庫に格納されています