Grizzly Adams Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Ево како би то изгледало у Оштром Цеју: var sum = Enumerable.Range(1, 100).Where(a => a * a % 4 == 0).Sum(); Очекивао сам једно питање у вези овога... ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 16, 2014 Аутор Пријави Подели Написано Август 16, 2014 Нажалост, јок. А ово горе је LINQ? Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Да, то је linq. Има више синтакси за исту ствар, ово је једна варијанта. ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 16, 2014 Аутор Пријави Подели Написано Август 16, 2014 Очекивао сам једно питање у вези овога... Које? 'Range' враћа 'IEnumerable<int>' на коме онда зовеш 'Where' да га просејеш кроз предикат и на крају зовеш 'Sum' да сабереш. Пропуштам ли нешто? Link to comment Подели на овим сајтовима More sharing options...
Иван ♪♫ Написано Август 17, 2014 Пријави Подели Написано Август 17, 2014 Зависи. 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. Juanito and Grizzly Adams је реаговао/ла на ово 2 Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 17, 2014 Пријави Подели Написано Август 17, 2014 Које? 'Range' враћа 'IEnumerable<int>' на коме онда зовеш 'Where' да га просејеш кроз предикат и на крају зовеш 'Sum' да сабереш. Пропуштам ли нешто? Да ли се кроз низ пролази једном или два пута? ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 17, 2014 Аутор Пријави Подели Написано Август 17, 2014 Ako je 'IEnumerable' lenj, onda jednom, a ako nije, onda dva puta. Grizzly Adams је реаговао/ла на ово 1 Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 17, 2014 Пријави Подели Написано Август 17, 2014 Трик је у linq методама (које су у ствари екстензије за IEnumerable) и које користе механизам "deferred execution". То омогућава низу linq позива да се надовезују један на други кроз једну итерацију. То значи да би: enum.Where(a => a > 0).Where(a => a % 4 ==0) било еквивалентно једном пролазу кроз низ/листу, са условом (a > 0 && a % 4 ==0), а не више пролаза. Што је баш моћно... Чак и ако направиш један linq упит па га после додатно филтрираш важи исто. Juanito је реаговао/ла на ово 1 ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 17, 2014 Аутор Пријави Подели Написано Август 17, 2014 Трик је у 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 Подели на овим сајтовима More sharing options...
Juanito Написано Август 17, 2014 Аутор Пријави Подели Написано Август 17, 2014 @@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 Подели на овим сајтовима More sharing options...
Juanito Написано Август 28, 2014 Аутор Пријави Подели Написано Август 28, 2014 Званични Swift блог, први и једини блог у историја Apple-a. https://developer.apple.com/swift/blog/ Link to comment Подели на овим сајтовима More sharing options...
nickelpower Написано Август 28, 2014 Пријави Подели Написано Август 28, 2014 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 Подели на овим сајтовима More sharing options...
Crveni Baron Написано Август 28, 2014 Пријави Подели Написано Август 28, 2014 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€ nickelpower је реаговао/ла на ово 1 Svaka čast Vučiću! Spasio si Srbiju iz ruku lopova i društvenih parazita! Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 28, 2014 Аутор Пријави Подели Написано Август 28, 2014 Takodje cuo sam da i ovaj Yosemite bice besplatan kao upgrade, ali nisam siguran? Upgrade је од прошле године, па до даљњег, бесплатан. С тим што мораш да имаш налоg на App Store-у. Ту имаш две могућности. Да набавиш картицу (која ти треба за идентификацију, чак и ако ништа не купујеш, већ скидаш бесплатне ствари) неке од земаља које имају App Store (Албанија, Чад, Танзанија...) или да користиш српску картицу, и направиш налог на хрватској продавници користећи лажну хрватску адресу. Мислим да тако већина људи овде ради. Скоро сам сигуран да је Apple намерно оставио ово последње (недокументовано) решење да ради код нас. Плутон, Млађони and nickelpower је реаговао/ла на ово 3 Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 28, 2014 Пријави Подели Написано Август 28, 2014 неке од земаља које имају App Store (Албанија, Чад, Танзанија...) ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Препоручена порука