• [^] # Re: Définition implicites ?

    Posté par . En réponse au journal Non, l'inférence de types n'est pas du typage faible. Oui, elle rend les programmes plus lisibles. Évalué à 9. Dernière modification le 21 novembre 2018 à 22:05.

    Effectivement, comme tu ne tapes pas le type de retour

    Inference de type n'implique pas de ne pas être explicite sur les types de retour des fonctions. Et surtout, ca empêche pas de nommer ses fonctions décemment pour qu'on comprendre ce qu'elle fait et ce qu'elle retourne.
    Ca veut juste dire que le compilateur n'a pas forcement besoin que tu explicites le type dans certains contextes. En pratique, être implicite sur les types de retour des fonctions, c'est une assez mauvaise pratique: ca force a lire l'implementation pour savoir ce qui est retourne, et si le language supporte des types avancés, genre union ou autres, ca peut t'emmener loin quand tu debugges.

    Typiquement, ca c'est bien:

    /// C'est assez clair ici que name() retourne une string, meme sans regarder le type de retour. Non pas que ca soit important ici, mais pour 
    /// le code appelant, on devine aisément que le nom va être une String
    public func name() -> String {
     // implementation
    }
    /// comme dit au dessus, c'est assez evident que name est une String, donc pas la peine de se répéter
    let a = name().lowercased()

    Et typiquement ca c'est mal:

    /// Nom de function alakon, bon courage pour savoir ce que c'est cense faire
    public func foo() {
     // implementation, de preference bien longue avec des if imbriqués et des early return
    }
    /// bonne fete des morts pour deviner ce qu'il se passe ici.
    let a = foo()