2016-11-29 1 views
1

Je plonge dans la fonction d'interpolation de chaîne de Scala et je me demande s'il est sûr de l'utiliser. interpolation de chaîne nous permet d'évaluer l'expression comme:Interpolation de chaîne de Scala et évaluation de l'expression

println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}") 

Mon doute est de savoir si nous devons évaluer l'expression dans la chaîne interpolée. Je vois beaucoup de code Scala où d'autres développeurs utilisent cette fonctionnalité comme dans l'exemple et ne savent pas si c'est correct et sûr.

+0

Ce syntaxiquement correct mais semble très laid. Etes-vous sûr que vous utiliseriez ce code en production et heureux de le maintenir? c'est sûr à utiliser. – Pavel

+0

Je ne veux pas voir de code comme ça sur la production. Mais je ne peux pas expliquer aux autres développeurs pourquoi ils ne devraient pas le faire. – PawelN

+0

Demandez-vous si un code scala réel pourrait être dans cette évaluation? génération de code, etc. Dans ce cas, je suppose qu'il pourrait y avoir un problème si l'évaluation échoue, à des questions complexes. Je ne sais pas si pratique cependant. – Pavel

Répondre

4

Je ne l'utiliserais jamais et je ne voudrais pas que mes collègues l'utilisent.

Deux choses sont essentiellement hors:

  • interpolation de chaîne est une fonctionnalité intéressante car elle rend concaténation des valeurs faciles à lire ... sauf si vous tenez un programme scala ensemble là-dedans :)
  • Non seulement il y a une expression complexe là-dedans, mais vous utilisez un effet secondaire, donc dans le processus d'évaluation de l'interpolation, 100 valeurs seront imprimées. Ainsi, vous obtenez

    other values 1 
    other values 2 
    ... 
    other values 100 
    Hello World!() 
    

Lorsque la () est la valeur de retour de la compréhension pour-, à savoir Unit.

Je me sauver (et mes collègues) et des maux de tête énormes juste faire

println(s"Hello World!") 
for (i <- 1 to 100) { 
    println(s"other values $i") 
} 
+0

L'interpolation de chaîne fonctionne-t-elle également pour l'ancienne concaténation de chaîne? – PawelN

+0

La concaténation de chaînes est légèrement plus rapide, donc si c'est votre goulot d'étranglement, utilisez-la au lieu de l'interpolation. La différence est négligeable dans la plupart des cas d'utilisation, mais - comme toujours - décide selon vos besoins. Voir http://yosoyu.com/index.php/2015/03/14/string-interpolation-vs-string-concatenation/ –