• [^] # Re: Go est lent, Rust est rouillé !

    Posté par (site web personnel) . En réponse au journal Explorer des langages de programmation - édition 2020. Évalué à 3.

    Je vais prendre un exemple dans la base de code sur laquelle je travaille :

    func containsReferencedBy(haystack []couchdb.DocReference, needle couchdb.DocReference) bool {
     for _, ref := range haystack {
     if ref.ID == needle.ID && ref.Type == needle.Type {
     return true
     }
     }
     return false
    }
    // RemoveReferencedBy removes one or several referenced_by to the file
    func (f *FileDoc) RemoveReferencedBy(ri ...couchdb.DocReference) {
     // https://github.com/golang/go/wiki/SliceTricks#filtering-without-allocating
     referenced := f.ReferencedBy[:0]
     for _, ref := range f.ReferencedBy {
     if !containsReferencedBy(ri, ref) {
     referenced = append(referenced, ref)
     }
     }
     f.ReferencedBy = referenced
    }

    On a une structure FileDoc, dont un des champs contient une liste de ReferencedBy, et on veut retirer de cette liste un ou plusieurs éléments.

    La même chose en Ruby, ça donne :

    class FileDoc
     def removeReferencedBy(ri)
     self.referencedBy.reject! do |ref|
     ri.any? {|r| r.ID == ref.ID && r.Type == ref.Type }
     end
     end
    end