swiftらしい簡潔な書き方を追求するスレ
昔「詰めvi」というスレが好きだったので立ててみました。
[出題者]
・問題を定義。実現したい機能、データ構造、制約条件等を簡潔に記載
・自分の解答例のコードを記載。この時点ではへぼいコードでも問題ないです
・自分の解答例への感想、改善要望等の記載推奨。工夫した点、不満な点(もう少しこうしたい)、こう書けるはずなのにエラーになったなど
[挑戦者]
・出題に対して「俺ならこう書く」というのをコードで回答
お約束
・コードで語ろう
投稿は実際に動作するコードを付けることを原則とします。
「この書き方は好き」とか複数の投稿済みコードに対して「こちらの方がSwiftらしい」みたいなことはコード無しでもOK。
他の人を批判する場合は必ずそれに相応する動作可能コードを付けること。
・コード無しでディスるだけの人は徹底無視
・投稿するコードはXCode8のプレイグラウンドまたは”IBM Swift Sandbox”にペーストしてそのまま動作すること
・環境は当面Swift3ベース、Swift Standard Library、Foundation Libraryの範囲とします。
異なる場合は動作環境を明記のこと。
評価基準
・swiftらしい書き方かどうか
簡潔性、直交性等
・意図が明確か
・短いは正義
例1
1から100までの奇数の2乗の合計を求める
let a = Array(1...100).filter{$0%2==1}.map{$0*$0}
let b = a.reduce(0){$0+$1}
1行で書きたかったがplaygroundがエラーになった
詰めswift [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2016/10/17(月) 07:26:01.96ID:Cfbu+94c2デフォルトの名無しさん
2016/10/17(月) 07:26:43.92ID:Cfbu+94c 例2
汎用的なエンディアン変換
protocol BoCInititializable {
associatedtype BaseType
init(littleEndian: BaseType)
init(bigEndian: BaseType)
}
extension UInt16: BoCInititializable{}
extension UInt32: BoCInititializable{}
extension UInt64: BoCInititializable{}
extension UInt: BoCInititializable{}
func bth<T:BoCInititializable>(_ v:T)->T {
return T(bigEndian: v as! T.BaseType)
}
func lth<T:BoCInititializable>(_ v:T)->T {
return T(littleEndian: v as! T.BaseType)
}
print( bth(UInt32(1)) )
もう少し簡潔に書きたいがunsignedintegerとかでは上手くかけなかった
汎用的なエンディアン変換
protocol BoCInititializable {
associatedtype BaseType
init(littleEndian: BaseType)
init(bigEndian: BaseType)
}
extension UInt16: BoCInititializable{}
extension UInt32: BoCInititializable{}
extension UInt64: BoCInititializable{}
extension UInt: BoCInititializable{}
func bth<T:BoCInititializable>(_ v:T)->T {
return T(bigEndian: v as! T.BaseType)
}
func lth<T:BoCInititializable>(_ v:T)->T {
return T(littleEndian: v as! T.BaseType)
}
print( bth(UInt32(1)) )
もう少し簡潔に書きたいがunsignedintegerとかでは上手くかけなかった
2016/10/17(月) 23:41:21.25ID:OlRB0UDA
2016/10/18(火) 01:45:25.16ID:j9lDw9lO
アイちゃんもSwift始めたの?
2016/10/18(火) 09:12:27.14ID:iz/6UNT/
>>3
わかりやすけど、ダセーよ
わかりやすけど、ダセーよ
2016/10/18(火) 12:34:25.63ID:XNeT8UDO
2016/10/19(水) 01:22:25.18ID:/23Ql8Gg
2016/10/19(水) 08:03:16.58ID:dprVW7hZ
うるせーだまれ
2016/10/19(水) 12:38:30.77ID:opBPzs7C
>>1
Arrayとfilterはstrideで、mapとreduceはreduce一発で書けるから
let a=stride(from:1, to:100, by:2).reduce(0){$0+$1*$1}
でいかが?
コンパイラに直値166650に置き換えられちゃうだろうけど
Arrayとfilterはstrideで、mapとreduceはreduce一発で書けるから
let a=stride(from:1, to:100, by:2).reduce(0){$0+$1*$1}
でいかが?
コンパイラに直値166650に置き換えられちゃうだろうけど
2016/10/19(水) 22:05:18.41ID:qqi+vVKd
可読性が高いSwiftねぇ…。
2016/10/19(水) 22:14:25.11ID:5poS2Bi0
$が目障りなのはきっとSwiftのせい
このモダン言語どこに向かってるんだ
このモダン言語どこに向かってるんだ
2016/10/20(木) 18:00:58.36ID:cE7OLI6Z
引数のビット長に応じた0詰を行う16進変換
import Foundation
func toHex<T:UnsignedInteger>(_ val:T)->String {
let hexLen=MemoryLayout<T>.size * 2
return String(format:"%0\(hexLen)x", val as! CVarArg)
}
print( toHex(UInt16(253)) )
コードから意図が読み取れる気がしない、、、
もう少しわかりやすい書き方ないかなぁ?
import Foundation
func toHex<T:UnsignedInteger>(_ val:T)->String {
let hexLen=MemoryLayout<T>.size * 2
return String(format:"%0\(hexLen)x", val as! CVarArg)
}
print( toHex(UInt16(253)) )
コードから意図が読み取れる気がしない、、、
もう少しわかりやすい書き方ないかなぁ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- れいわ議員「母親はね、子どもを戦争に行かせるために産んだんじゃないんだよ」 高市総理に“10秒回答”迫り、残り5分は“独壇場”★3 [♪♪♪★]
- BreakingDown選手がくも膜下出血、瓜田純士、平手打ちを行った江口響は「もう格闘技も辞めます。責任取りたいです』とまで言ってきてる」 [muffin★]
- 中国国防省が再反論 SNSで公開した音声とは“別の通報”で日本に訓練の時間や海域を通報したと主張★3 [夜のけいちゃん★]
- 資さんうどんが「PayPay」の取り扱いを停止 他のキャッシュレス決済は引き続き利用可能 [少考さん★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★7 [お断り★]
- 【令和】「ゲーム機にスペックは必要かどうか」議論が白熱 ユーザーが実際に求めているものは? [王子★]
- 障害者だからカレーの作り方が分からない
- おまいらってセックスしないの?
- あのちゃんってマン毛処理してそうよな
- 【速報】高市早苗、文春砲wwwwwwwwwwwwwwwwwwwwwwwwwwwww [339035499]
- 息子の名前を「業~悲しみの連鎖、人は過ちを繰り返す~」にしようと思うんだが
- プロレスラーってロープに振ると走って戻ってくるけど
