Jump to content

WWDC 14

Оцени ову тему


Препоручена порука

Очекивао сам једно питање у вези овога... :)

 

Које? 'Range' враћа 'IEnumerable<int>' на коме онда зовеш 'Where' да га просејеш кроз предикат и на крају зовеш 'Sum' да сабереш. Пропуштам ли нешто?

Link to comment
Подели на овим сајтовима

Зависи. :)

class SomeClass {
    
    func doSomething() {
        
    }
}

class TestClass {
    
    var optionalProperty: SomeClass?
}

let test = TestClass()
test.optionalProperty.doSomething() // Ovo se neće kompajlirati.
test.optionalProperty!.doSomething() // Ovo će eksplodirati.
test.optionalProperty?.doSomething() // Ovo jednostavno ne radi ništa ako je optionalProperty == nil, slično kao u Obj-C.

 

Da, tačno, trebalo je biti precizniji pošto je ipak reč o swift-u

To je ipak wrap-ovan null, eksplicitno unwrapped optional nema proveru, pokušava da radi sa null i zato puca.

 

@@Grizzly Adams

 

Swift je tako koncipiran da očekuje da referenca uvek ima vrednost, da bude inicijalizovana, ili pri deklaraciji, ili u konstruktoru. Ukoliko to ne može da se ispuni, odnosno varijabla može i da nema vrednost, onda ona mora da se deklariše kao optional. To je ništa drugo do običan wrapper, koji, umesto da uzrokuje crash kada je varijabla null, ume da ,,elegantno vrati null" i nastavi dalje.

Link to comment
Подели на овим сајтовима

Које? 'Range' враћа 'IEnumerable<int>' на коме онда зовеш 'Where' да га просејеш кроз предикат и на крају зовеш 'Sum' да сабереш. Пропуштам ли нешто?

 

Да ли се кроз низ пролази једном или два пута?

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

Трик је у linq методама (које су у ствари екстензије за IEnumerable) и које користе механизам "deferred execution". То омогућава низу linq позива да се надовезују један на други кроз једну итерацију.

 

То значи да би:

enum.Where(a => a > 0).Where(a => a % 4 ==0)

било еквивалентно једном пролазу кроз низ/листу, са условом (a > 0 && a % 4 ==0), а не више пролаза. Што је баш моћно...

 

Чак и ако направиш један linq упит па га после додатно филтрираш важи исто.

  • Волим 1

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

Трик је у linq методама (које су у ствари екстензије за IEnumerable) и које користе механизам "deferred execution". То омогућава низу linq позива да се надовезују један на други кроз једну итерацију.

 

То значи да би:

enum.Where(a => a > 0).Where(a => a % 4 ==0)

било еквивалентно једном пролазу кроз низ/листу, са условом (a > 0 && a % 4 ==0), а не више пролаза. Што је баш моћно...

 

Чак и ако направиш један linq упит па га после додатно филтрираш важи исто.

 

Тако Haskell увек ради. За Swift су решили да буду експлицитни са лењошћу (од скора, у ранијим бетама је било мало другачије).

let hardworkingSum = Array(1...10)
    .filter { println("calling predicate..."); return $0 * $0 % 4 == 0}
    .reduce(0) { println("combining...") ; return $0 + $1 }

// Dva puta prolazi kroz niz.
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
calling predicate...
combining...
combining...
combining...
combining...
combining...
// Proširujemo LazySequence da ne bismo morali da zovemo globalnu reduce funkciju
extension LazySequence {
    func reduce<U>(initial: U, combine: (U, S.Generator.Element) -> U) -> U {
        return Swift.reduce(self, initial, combine)
    }
}

let lazySum  = lazy(Array(1...10))
    .filter { println("calling predicate..."); return $0 * $0 % 4 == 0 }
    .reduce(0) { println("combining...") ; return $0 + $1 }

// Samo jednom prolazi kroz niz.
calling predicate...
calling predicate...
combining...
calling predicate...
calling predicate...
combining...
calling predicate...
calling predicate...
combining...
calling predicate...
calling predicate...
combining...
calling predicate...
calling predicate...
combining...
Link to comment
Подели на овим сајтовима

@@Grizzly Adams

 

Swift je tako koncipiran da očekuje da referenca uvek ima vrednost, da bude inicijalizovana, ili pri deklaraciji, ili u konstruktoru. Ukoliko to ne može da se ispuni, odnosno varijabla može i da nema vrednost, onda ona mora da se deklariše kao optional. To je ništa drugo do običan wrapper, koji, umesto da uzrokuje crash kada je varijabla null, ume da ,,elegantno vrati null" i nastavi dalje.

 

Да, то је у ствари обичан enum са придруженом вредношћу у случају  'Some', нешто као 'Maybe' у Haskell- у (чак су поменули Haskell у коментару).

enum Optional<T> : Reflectable, NilLiteralConvertible {
    case None
    case Some(T)
    init()
    init(_ some: T)
    var hasValue: Bool { get }

    /// Haskell's fmap, which was mis-named
    func map<U>(f: (T) -> U) -> U?
    func getMirror() -> MirrorType
    static func convertFromNilLiteral() -> T?
}

Могуће га је користити и овако незаслађеног, што може да буде корисно кад се ради pattern matching са више optional-a.

extension String {
    
    func isValid() -> Bool {
        return true
    }
    
    func transform() -> String {
        return "transformed string"
    }
}

func transformString(string: String) -> Optional<String> {
    if string.isValid() {
        return .Some(string.transform())
    } else {
        return .None
    }
}

switch transformString("bla bla") {
case .Some(let transformedString):
    println(transformedString)
case .None:
    println("BUMMER!")
}

switch (transformString("bla bla"), transformString("truc")) {
case (.Some(let transformedBla), .Some(let transformedTruc)):
    println(transformedBla + transformedTruc)
default:
    println("BUMMER!")
}

 

 
Link to comment
Подели на овим сајтовима

  • 2 weeks later...

Svake godine izbacuju nov ... Sada ce , u narednom mesecima ... Do bozica oni sve to renoviraju ...

I jel vredi da se sad kupi ovaj novi model kojeg su upravo izbacili? Ili je bolje cekati do 2015? Takodje cuo sam da i ovaj Yosemite bice besplatan kao upgrade, ali nisam siguran?

Link to comment
Подели на овим сајтовима

I jel vredi da se sad kupi ovaj novi model kojeg su upravo izbacili? Ili je bolje cekati do 2015? Takodje cuo sam da i ovaj Yosemite bice besplatan kao upgrade, ali nisam siguran?

Pa sta da cekas svaki im je odlican...

Ja sam 2009 kupio macbook pro i sljaka odlicno. Sada je u servisu jer je poceo da se cuje ventilator ... I to je sve. Nije sada super brz kao pre 5 godina ali sljaka bez problema. Razmisljam samo da ga otvorim i zamenim hard disk sa nekim SSD i to bi ga verujem malo ubrzalo . I uopste ne razmisljam o kupovini necega u naredne 2-3 godine ...

Tako da kada ga kupis miran si ...

A OS im je gratis ili kosta nesto tipa 10-15€

Svaka čast Vučiću! Spasio si Srbiju iz ruku lopova i društvenih parazita! 

Link to comment
Подели на овим сајтовима

Takodje cuo sam da i ovaj Yosemite bice besplatan kao upgrade, ali nisam siguran?

 

Upgrade је од прошле године, па до даљњег, бесплатан. С тим што мораш да имаш налоg на App Store-у. Ту имаш две могућности. Да набавиш картицу (која ти треба за идентификацију, чак и ако ништа не купујеш, већ скидаш бесплатне ствари) неке од земаља које имају App Store (Албанија, Чад, Танзанија...) или да користиш српску картицу, и направиш налог на хрватској продавници користећи лажну хрватску адресу. Мислим да тако већина људи овде ради. Скоро сам сигуран да је Apple намерно оставио ово последње (недокументовано) решење да ради код нас.

Link to comment
Подели на овим сајтовима

  • Чланови који сада читају   0 чланова

    • Нема регистрованих чланова који гледају ову страницу
×
×
  • Креирај ново...