Search
Write a publication
Pull to refresh
-9
@NishchebrodKolya2read⁠-⁠only

User

Send message
«Не осилил» говорят ребята, гоняя лысого на GOF.
В статье как бы Optional, который так же перечисление.
var next: Node?

Можно записать так.
var next: Optional<Node> = .none

И Optional который написал я, от свифтового Optional ничем не отличается.
В Swift 3 вроде появилась.

Картинка
image
тип значение и не может иметь рекурсию на экземпляр самой себя

Может.

indirect enum Optional<T> {
    case some(T)
    case none
}

struct Node {
    var payload: Int
    var next: Optional<Node>
}

let node = Node(payload: 16, next: .some(Node(payload: 13, next: .none)))
Для полноты картины, не хватает фото продукта, и видео производства. В контексте данной статьи конечно.
Потом незаметно уберут ядро виндовс и будет у Микрософт свой линукс с UI на mono.
Вот бы на Go кто написал тест, который как известно быстрее Rust.
Там где java, с++ вообще не котируется и наоборот. По этому это Вы напишите, а мы почитаем.
Почему бы нам тогда не сравнить эквивалентный код на C++ и Java, и не порадоваться какой молодец C++?
Это как бы решение из коробки, очевидно перед разработчиками swift не стояла задача супер оптимизации, в rust как известно наоборот.
Свифт ни разу не позиционируется как самый быстрый, и корректнее было бы его сравнивать с Kotlin Native, тот вроде тоже с ARC и под мобилки.
А если попробовать более по свифтовому?

import Foundation

struct DebtRec: Decodable {
    private enum Key: String, CodingKey { case company, debt, phones }
    private struct Company: Decodable { let name: String }
    
    enum Error: Swift.Error { case invalidCompany, invalidPhones, invalidPhoneItem, invalidDebt }
    
    let company: String, phones: [String], debt: Double
    
    private struct PhoneItem: Decodable {
        let value: String
        init(from decoder: Decoder) throws {
            let decoder = try decoder.singleValueContainer()
            guard let value = (try? decoder.decode(Int.self)).map({ "\($0)" }) ?? (try? decoder.decode(String.self)) else { throw Error.invalidPhoneItem }
            self.value = value
        }
    }
    
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: Key.self)
        guard let company = (try? container.decode(String.self, forKey: .company)) ?? (try? container.decode(Company.self, forKey: .company).name) else { throw Error.invalidCompany }
        self.company = company
        guard let phones = (try? container.decode(Int.self, forKey: .phones)).map({ ["\($0)"] }) ?? (try? container.decode([PhoneItem].self, forKey: .phones).map({ $0.value })) else { throw Error.invalidPhones }
        self.phones = phones
        guard let debt = (try? container.decode(Double.self, forKey: .debt)) ?? (try? container.decode(String.self, forKey: .debt)).flatMap({ Double($0) }) else { throw Error.invalidDebt }
        self.debt = debt
    }
}

func main() throws {
    let data = try Data(contentsOf: URL(fileURLWithPath: "__path_to_json__"))
    let res = try JSONDecoder().decode([DebtRec].self, from: data)
}

try main()
Вы сравнили ежа с ужом, как минимум языки под разные задачи, тогда уж сравнивайте C++ и java, результат будет похожий.
Немного слабительного в кошачий корм, и чиракны коты сами начинают оттирать.
Если не затруднит, продемонстрируйте Ваш супер успешный сайт, написанный с применением высшего математического образования.

P.S. Очень интересно, для саморазвития.
На тайпскрипте сейчас пилят почти все, тут без шансов. Во флаттере ставку сделали а ленивых джава разработчиков, для которых котлин уже сложно, а дарт почти так же.
Дарт с синтаксисом как у джавы из 90х? По моему он устарел ещё до выхода.

Information

Rating
Does not participate
Registered
Activity