JeuWeb - Crée ton jeu par navigateur
[Scala] play! - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Scala] play! (/showthread.php?tid=6129)

Pages : 1 2 3 4 5


RE: [Scala] play! - srm - 09-07-2012

Qu'est ce que tu as trouvé de si bien avec Play! et Scala comparé au PHP ?


RE: [Scala] play! - Marc15 - 10-07-2012

C'est vraiment Play 2.0 qui m'intéresse, surtout avec Akka. On peut créer des "workers", les distribuer sur plusieurs coeurs et même plusieurs serveurs.

J'aime le fonctionnement en général. Le routeur analyse l'URL et exécute la méthode correspondante en Scala qui doit renvoyer un résultat qui peut être du HTML, XML, JSON, etc. Je sais qu'on voit ça avec les frameworks PHP, mais je le sens pas aussi naturel... En PHP, qui est souvent couplé a un serveur Web grâce a un mod, tout le connu est recompilé et réexécuté à chaque requête...

http://www.playframework.org/

Le langage, Scala, est beaucoup plus intéressant lui aussi. Ça serait trop expliquer, mais il y a plein de petits détails qui font que Scala est très agréable à utiliser. Par exemple. pas de point pour appeler des méthodes, ni de parenthèses. Je suis en train de lire un livre sur le Scala (écrit par l'auteur du langage) et j'apprends des nouvelles méthodes que je ne connaissais pas. Le mélange fonctionnel/objet est fascinant.

Et je ne suis pas un fan du PHP. Ça a un look un peu vieux. Les noms des fonctions laissent à désirer, la POO est là, mais pas assez utilisée... Par exemple, je travaille sur un jeu Web en PHP et j'ai dû passer une journée à bien comprendre pour configurer le tout en UTF-8.

Un autre exemple, la gestion des fuseaux horaires est devenue très simple avec DateTime et DateTimeZone. C'est le genre de classe que j'aimerais voir plus en PHP. C'est ce que je veux dire quand je dis que la POO n'est pas encore assez utilisée...

Désolé, il est tard ici, je pourrai en dire plus demain. Wink


RE: [Scala] play! - srm - 10-07-2012

J'attends avec impatience la suite Smile


RE: [Scala] play! - Marc15 - 10-07-2012

Scala a été fait par un ancien de l'équipe qui a travaillé sur Java, donc il connait bien la chose. Il connait la création de langages, il connait la JVM. Ça a donné un produit de qualité. PHP, c'était à la base un projet amateur, avec des fonctions avec de drôles de noms, une syntaxe très basique, pas d'originalité. On, voit les version 5.3 et 5.4 que c'est en train de changer, mais je trouve que ce langage souffre encore trop de son passé amateur.

En PHP, on peut utiliser des double guillemets pour gérer les chaînes. Mais c'est trop lent puisqu'on peut y insérer des variables, alors on a peut utiliser des simples guillemets, mais il faut concaténer. C'est pas bien grave, mais ça montre un peu le mélange dû au fait qu'il a fallu rendre le langage plus professionnel en le gardant compatible avec les vieux projets.

Juste pour mesurer la longueur d'une chaîne. On a le fameux strlen(). Malheureusement, pas de support de l'UTF-8. On ne peut pas changer la fonction, alors on a mb_strlen, iconv_strlen (ceux deux là doivent être configurés avec mb_internal_encoding('UTF-8') et iconv_set_encoding('internal_encoding', 'UTF-8') pour faire du UTF-8) ou même grapheme_strlen. On me dira que ça fait le travail, mais c'est vraiment le bordel. En Scala, il n'y a qu'une seule façon de compter le nombre de charactères et tout fonctionne en UTF-8. Simple et efficace. D'ailleurs, PHP est le seul langage à être aussi compliqué pour faire des choses simples comme ça. J'en connais pas d'autres. Tout ça parce que le passé "amateur" pèse encore lourd.

Comme je disais avec DateTime et DateTimeZone, si PHP pourrait avoir une classe native String qui fonctionne en UTF-8 et qui contient tous les méthodes nécessaires pour manipuler les chaînes, ça serait merveilleux.

En Scala j'ai adoré passer des fonctions en paramètres. On peut écrire des programmes sans utiliser de boucles. En PHP, après une petite recherche, ça semble pour se faire, mais c'est loin d'être aussi agréable qu'avec Scala.

En Scala, avec une liste "maListe", on peut faire : maListe foreach println

C'est vrai que ça ne veut rien dire. On peut écrire des programmes sans ce genre de fonctionnalité, mais PHP n'a aucune originalité de ce genre. C'est un langage simple, fade.

Pour revenir au framework Play!, j'aime qu'il soit lui-même un serveur Web, on peut comme beaucoup de frameworks qui ne sont pas en PHP. Avec PHP, il faut un Apache ou autre derrière. Ça demande souvent de configurer plusieurs couches. Par exemple, avec Play! j'ai mon fichier de routage, qui redirige les URL vers les méthodes correspondantes et elles retournent le HTML. Pas plus compliqué. En PHP (avec un serveur Web derrière), chaque URL représente une ressource (une fichier), sur le serveur. Donc /contacts/contact.php?id=3 va aller chercher le fichier contact.php dans le dossier contacts/. Souvent, ce n'est pas comme ça que sont organisés nos dossiers, alors on doit configurer Apache avec des .htaccess pour faire de la réécriture d'URL. On perd un temps fou. Pour palier ce problème, il faudrait un framework PHP indépendant.

Si au besoin, on veut Apache ou autre, rien n'empêche de l'utiliser derrière Play! également.

Je crois que le PHP est populaire parce qu'il a été fait au début du Web quand plein de gens ont commencé à s'y intéresser et que les autres langages/frameworks étaient trop chères et compliquées. Maintenant il existe des langages meilleurs et plus modernes, mais la popularité de PHP fait qu'on l'utilise encore parce qu'on trouve facilement de la main d'oeuvre et de la doc. Ça semble changer peu à peu. PHP est en perte de vitesse si je ne m'abuse.

Je dis ça, mais je suis pas un programmeur avec des années et des années d'expérience. Qu'en pensez-vous?


RE: [Scala] play! - archANJS - 11-07-2012

Personnellement, j'en pense que tu as raison sur bien des points ^^


RE: [Scala] play! - Damocorp - 13-07-2012

Ben j'en pense que vos conversation sont toujours aussi intéressante. Cela fait un bail que je pensais essayer les framework php et la POO. Mais au final, quitte à vouloir apprendre, un autre langage ça serait tout aussi sympathique :bave:
De toute façon j'ai presque plus de cheveux, donc je pourrai pas me les arracher Tongue

Une idée tordu qui me viens serait de réaliser un même projet en php avec framework et POO et l'équivalent en Scala pour testé et voir ce qui me plait le plus tiens ! Je sent que je vais encore passer des nuits blanches Confusediffle:

La nomenclature des tables d'Oxman me plait bien en plus.

J'vous laisse, j'suis fatigué, j'vais aller m'informer un peu plus.


RE: [Scala] play! - niahoo - 14-07-2012

_ __ ! __, _ ___ __ _, __. ___ + __ => _-> (_,_)


RE: [Scala] play! - srm - 14-07-2012

Un autre ORM :

package models

import org.squeryl.PrimitiveTypeMode._
import org.squeryl.{KeyedEntity, Schema}
import org.squeryl.annotations.Column
import org.squeryl.dsl._

import java.util.{Date}
import models.Db._


class User(
val id: Long,
@Column(length=40)
val login: String,
@Column(length=20)
val name: String,
@Column(length=6)
val color: String,
@Column("create_date")
val createDate: Date
) extends KeyedEntity[Long] {
lazy val squares: OneToMany[Square] = Db.userToSquares.left(this)
}


object User {

def findByLogin(login: String) =
from(users)(u =>
where(u.login === login)
select(u)
).headOption

}



RE: [Scala] play! - Maks - 15-07-2012

Globalement c'est compréhensible ^^

Quelle est la différence entre class User et object User ?
Ta classe contient un schéma et l'objet des méthodes ?


RE: [Scala] play! - archANJS - 15-07-2012

Je dirais vite comme ça que class est la définition de la table et object, le modèle en question.