Elm Language
Le débogage
Recherche…
Syntaxe
- Debug.log "tag" anyValue
Remarques
Debug.log prend deux paramètres, une String pour marquer la sortie de débogage dans la console (afin de savoir d'où elle provient / à quoi correspond le message) et une valeur de n'importe quel type. Debug.log exécute l'effet secondaire de la journalisation de la balise et de la valeur sur la console JavaScript, puis renvoie la valeur. L'implémentation dans JS pourrait ressembler à:
function log (tag, value){
console.log(tag, value);
return value
}
JavaScript a des conversions implicites, donc la value ne doit pas être explicitement convertie en String pour que le code ci-dessus fonctionne. Toutefois, les types Elm doivent être explicitement convertis en une String et le code natif pour Debug.log montre en action.
Enregistrer une valeur sans interrompre les calculs
Le deuxième argument de Debug.log est toujours renvoyé, vous pouvez donc écrire du code comme celui-ci et cela fonctionnera simplement :
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case Debug.log "The Message" msg of
Something ->
...
Remplacer le case msg of par la case Debug.log "The Message" msg of entraînera le case Debug.log "The Message" msg of actuel de la console à chaque appel de la fonction de mise à jour, mais ne changera rien.
Piping a Debug.log
Au moment de l'exécution, les éléments suivants afficheraient une liste d'url dans votre console et continueraient à calculer
payload =
[{url:..., title:...}, {url=..., title=...}]
main =
payload
|> List.map .url -- only takes the url
|> Debug.log " My list of URLs" -- pass the url list to Debug.log and return it
|> doSomething -- do something with the url list
Débogueur itinérant
Au moment de la rédaction de ce document (juillet 2016), elm-Reactor a été temporairement dépourvu de fonctionnalité de déplacement temporel. Il est possible de l'obtenir en utilisant le jinjor/elm-time-travel .
Son utilisation reflète les Html.App du program* modules Html.App ou Navigation , par exemple au lieu de:
import Html.App
main =
Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
tu écrirais:
import TimeTravel.Html.App
main =
TimeTravel.Html.App.program
{ init = init
, update = update
, view = view
, subscriptions = subscriptions
}
(Bien sûr, après avoir installé le paquet avec elm-package .)
L'interface de votre application change en conséquence, voir l'une des démos .
Depuis la version 0.18.0, vous pouvez simplement compiler votre programme avec l'indicateur --debug et obtenir un débogage sans effort supplémentaire.
Debug.Crash
case thing of
Cat ->
meow
Bike ->
ride
Sandwich ->
eat
_ ->
Debug.crash "Not yet implemented"
Vous pouvez utiliser Debug.crash lorsque vous souhaitez que le programme échoue, généralement utilisé lorsque vous êtes en train d'implémenter une expression de case . Il n'est pas recommandé d'utiliser Debug.crash au lieu d'utiliser un type Maybe ou Result pour des entrées inattendues, mais généralement uniquement au cours du développement (autrement dit, vous ne publiez généralement pas le code Elm qui utilise Debug.crash ).
Debug.crash prend une valeur de String , le message d'erreur à afficher lors d'une panne. Notez que Elm affichera également le nom du module et la ligne du plantage, et si le plantage se trouve dans une expression de case , il indiquera la valeur du case .