Skip to content

Instantly share code, notes, and snippets.

View ezura's full-sized avatar

Yuka Ezura ezura

View GitHub Profile
@ezura
ezura / kotlin
Created June 17, 2017 07:22
operator のメソッド感
class A() {
operator fun plus(that: Int): Int {
return that + 1
}
}
A() + 1
// error
// 1 + A()
/* インスタンスと密着してる感じがする。演算子もメソッドの雰囲気 */
@ezura
ezura / CodePiece.swift
Created June 10, 2017 05:34
うむむ。例を見た感じ、Swift は Array が Value type だから共変になれてるのかな… #u_scala #swift #CodePiece
let strings: Array<String> = ["", ""]
var anys: Array<Any> = strings
anys[0] = 1
@ezura
ezura / CodePiece.swift
Last active June 1, 2017 15:10
意外とありな気がしてきた( 'ω') 全文: https://gist.github.com/ezura/dbb249c5663e97985f49483e6bbac2e5 #swift #CodePiece
protocol P {
associatedtype PermissionMode: Permission = Default
func f() -> String // これを差し替える
}
extension P { /* 略 */ }
extension P where Self.PermissionMode == Strict { /* 略 */ }
struct A: P {}
struct B: P {
typealias PermissionMode = Strict
protocol Permission {}
enum Default: Permission {}
enum Strict: Permission {}
protocol P {
associatedtype PermissionMode: Permission = Default
func f() -> String
}
extension P {
@ezura
ezura / CodePiece.swift
Created May 29, 2017 10:30
だとすると、function 型も Void も、Any として表現できるのも納得でき…そう…(´・ω・`)? #swift #CodePiece
{} /* () -> Void */ is Any
@ezura
ezura / CodePiece.swift
Created May 27, 2017 03:58
だから、こうなるのね #CodePiece #speee_lounge #swift #kotlin
// Kotlin
val itr = (1..2).iterator()
println(itr.next()) // 1
println(itr.next()) // 2
// !!!: Exception in thread "main" java.util.NoSuchElementException
println(itr.next())
// Swift
var itr = [1, 2].makeIterator()
itr.next() // 1
@ezura
ezura / CodePiece.swift
Last active November 20, 2018 06:46
Kotlin の Iterator、「次の要素を返す」のと「次の要素があるか」を違うメソッドで管理してるっぽい(´・ω・`)? #CodePiece #speee_lounge #swift #kotlin
// # Iterator の実装
// Kotlin
// 次の要素があるかどうかは hasNext みる
fun next(): T
fun hasNext(): Boolean
// Swift
// 次の要素があるかは next() の返り値の型が Self.Element? なので、これだけで判断可能
func next() -> Self.Element?
@ezura
ezura / CodePiece.swift
Created May 19, 2017 13:46
string literal の方が妥当な気がする #swift #CodePiece
class Type: NSObject {
let value = 1
}
let staticString: StaticString = #keyPath(Type.value)
let string: String = #keyPath(Type.value)
else {
if cond2 {
}
}
// else の {} を省略して
else if cond2 {
}
class Obj {
func f() { /* do something */ }
}
// obj そのあと使わないのにそのスコープに存在し続けるのが気持ち悪い (超個人的な主観)
// (do {} 使うのも手だけど…)
let obj: Obj = {
if true /* condition */ {
return Obj()
} else {