31/05/2010

L'arabe dans la langue française

Un certain nombre de mots d'arabe (ou de tunisien) sont utilisés couramment en argot Français sans forcément que l'on connaisse leur origine :

- el flouss (l'argent)
- el caoua (le café)
- kif kif (c'est la même chose)
- chouaia (un petit peu)
- sifr (zéro), qui a donné "chiffre"
- el bled (le village)
- maboul (fou)
- fissa (vite)
- méchoui (grillé)
- el souk (le marché)
- el caid (le chef)
- el toubib (le médecin)

Il y en a sans doute d'autre...

Point théorique Java : Assert

- l'activation des asserts se fait au moment du lancement d'un programme en utilisant le paramètre -ea (pour enable assertion)

- Lorsque les assertions sont désactivées, les expressions passées aux asserts ne sont pas évaluées


...
int i = 0;
assert (i=4)==4;
// ici i vaut 4 si les assertions sont activées et 0 sinon
...


- Attention : ceci est un cas particulier très étrange :
Lorsque l'on utilise un objet avant d'avoir initialisé sa classe, il doit se comporter comme si les assertions étaient actives.

class P{
static {Q.method();}
}
class Q extends P{
static void method(){
int i = 0;
assert (i=4)==4;
System.out.println(i);
}
}

Ici l'initialisation de Q entraine celle de P qui appelle Q.method() qui est donc exécutée avant que Q soit initialisée.
Que les assertions soient activées ou non, le println affichera 4;

Questions pièges Java n°4 : réponse

Code :

class Util{
public static boolean Print(String s){
System.out.print(s);
return true;
}
}
class Parent{
static int i = Classe.init ( );
}
class Classe extends Parent {
static int i = 4;
static int init() {
assert Util.Print ( "A" );
return i;
}
}
public class AClass {
public static void main(String[ ] args){
Classe c = new Classe( );
Util.Print ( "" +Parent.i);
}
}


Réponse
Le programme affiche "A0"

Explication
Lorsque les assertions sont désactivées, l'évaluation des expressions passées en parametres des assert n'a pas lieu
Cependant, lorsque l'on accède à un objet avant de l'avoir initialisé, il se comporte comme si les assertions étaient activées.
Ici :

- Classe( ) lançe l'initialisation de Classe.
- l'initialisation de Classe lançe l'initialisation de Parent
- l'initialisation de Parent appelle Classe.init();
- Classe.init(); est exécutée comme si les assertions étaient activées, et renvoie Classe.i;
- l'initialisation de Parent se termine
- l'initialisation de Classe met Classe.i = 4;


Le programme affiche donc toujours A0


Point théorique associé
ici