1

A a;
for (...){
    if (toto){
        a = new A();
    } else {
        a.b();
    }
}

car moi je sais que toto sera vrai au moins une fois avant d'être false.... Mais le compilateur non :-/
Use of possibly unassigned field 'b'

C'est pas un warning, c'est un error qui arrête la compilation.
en faisant un A a = new A(); bidon au début, il est content. (cest le compilateur C#)
Tout ce qui passe pas par le port 80, c'est de la triche.

2

Tu ne peux pas l'initialiser à null?
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

3

je vois rien d'anormal, le compilo va pas d'amuser a preexecuter le code pour verifier que le cas ne se presentera pas ...

4

Ce qui est anormal est que c'est une erreur. Quand le compilateur est sûr à 100% que la variable sera utilisée non initialisée, je veux bien, mais quand il n'est pas sûr, c'est dingue d'en faire une erreur plutôt qu'un simple avertissement.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

oui mais le compilo, je suppose qu'il vient d'un empire monopolistique ouest-américain (trilove)

sinon +1 pour l'init à NULL et pencil pour ./3

6

squalyl (./5) :
oui mais le compilo, je suppose qu'il vient d'un empire monopolistique ouest-américain (trilove)

C'est bien pour ça qu'il est con et lourd. tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

faudrait tester avec le compilo de mono, pour rigoler :]

8

./6 tu parles de toi ou du compilo la ? confus

9

Je parie qu'avec GTC ça passe. Sinon, c'est dommage que ça provoque un refus de compilation. Si ce code est une routine critique, l'initialisation à NULL ralentit un peu l'affaire.

[troll inside]
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

10

Rintintin (./8) :
./6 tu parles de toi ou du compilo la ? confus

De toi. gni
Non, du compilateur, évidemment. roll
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Thibaut (./9) :
Je parie qu'avec GTC ça passe.

Avec TIGCC, ça passe forcément, au pire avec un warning, et si l'optimiseur reconnaît que la variable n'est pas utilisée non initialisée, sans aucun faux avertissement.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

= null n'est pas possible. En fait, c'est pas des classes c'est des struct là. Et il veut pas null pour une structure...

Hmm.. ce qui voudrait dire que a n'est pas un pointeur sorry et donc que c'est "normal" ? Mais c'est quand même anormal parce qu'il demande à faire un new A(); quand même.
Tout ce qui passe pas par le port 80, c'est de la triche.

13

Tout le C# est anormal. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

t'as regarde si y'avait pas un flag pour le compilo qui permet d'avoir une compilation moins stricte? genre s'il peut pas resoudre, il continue et s'arrete pas...

15

Non, j'ai laissé les options par défaut. C'est pas trop grave de tte facon, mais c'est juste que ça parait bizarre comme truc.

./13 > Au début, j'étais assez rétissant, mais plus je code en C# plus je le trouve bien. Surtout le LINQ, c'est une tuerie.
Tout ce qui passe pas par le port 80, c'est de la triche.

16

Une struct en C#, contrairement à une classe, c'est un type valeur et ya pas d'héritage. C'est fait pour être léger & rapide pour les choses comme Point, etc. T'es sûr que dans ton cas tu devrais pas utiliser une classe ?

Quand tu fais un new il initialise tous les champs à leur valeur par défaut, mais tu n'es pas pas obligé de l'utiliser tu peux aussi initialiser les champs à la main. Par contre pour utiliser ton objet tu dois avoir initialisé tous les champs.
A a;
a.x=1;
a.y=2;

PS: c'est soulant les personnes qui viennent répondre pour dénigrer alors qu'elles n'ont jamais fait de C# neutral
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

17

A a; 
for (...){ 
    if (toto){ 
        a = new A(); 
    } else { 
        a.b(); 
    } 
}


En même temps avec un code comme ça, je préfère que le compilo laisse pas passer...

18

En même temps, parfois il faut faire des compromis entre rigueur et pragmatisme.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

19

./18 mais c'est faisable avec un =null dans le cas d'une classe, j'ai juste l'impression que onur utilise une struct à tort ici.
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

20

en fait b, cest meme pas une fonction, c'est une variable membre. Et le struct est assez petit, c'est vraiment pas la peine de faire une classe pour ça, il y a deux~trois champs.

Le code parait non-rigoureux, parce que je parse un string du genre:
idsalarie[0]=...&prm[0][0]=...&prm[0][1]=...&prm[0][2]=...&prm[0][3]=...idsalarie[1]=...&prm[1][0]=...&prm[1][1]=...&prm[1][2]=...&prm[1][3]=...
quand il rencontre idsalarie, il crée un A, dans lequel il rajoute les 4 parametres qu'il lit les fois d'après.
A ce propos, y a un truc tout prêt en C# qui permet d'avoir direct un array ou un var à partir d'un string de ce genre? Je sais que ça existe en php, mais j'ai pas trouvé en C#.
Tout ce qui passe pas par le port 80, c'est de la triche.

21

Rintintin (./3) :
je vois rien d'anormal, le compilo va pas d'amuser a preexecuter le code pour verifier que le cas ne se presentera pas ...

oui c'est même indécidable en général il me semble. Mais dans le doute il devrait me laisser continuer non?
Tout ce qui passe pas par le port 80, c'est de la triche.

22

onur (./20) :
A ce propos, y a un truc tout prêt en C# qui permet d'avoir direct un array ou un var à partir d'un string de ce genre? Je sais que ça existe en php, mais j'ai pas trouvé en C#.

String.Split ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

23

./20 > Je suis pas sur de ce que tu veux faire, mais en .NET tu as aussi des regex, tu as aussi String.Split, String.Join, String.Format, etc... wink
./21 > Non il ne doit pas. Je suis d'accord que c'est chiant, j'ai déjà rencontré le problème plusieurs fois, mais si tu réfléchis un peu:
Quand tu code en C ou C++, si tu n'initialise pas une variable, ben elle a une valeur indéterminée... En C# c'est pareil, donc rien de méchant jusque là.
Si tu fais un test du type de celui que tu montre en ./1 , dans le meilleur des cas ton test donnera toujours le bon résultat.
Mais dans le cas non prévu, voire impossible, si il venait à ce produire quand même... En C/C++ si par ta variable était un pointeur (ça peut aussi avec d'autres variables mais c'est plus par effet indirect) tu as de grandes chances de faire ce que les linuxiens appellent une erreur de segmentation. En C# c'est pareil. Sauf que .NET ne peut et ne doît jamais crasher, tout doit passer par des exceptions managées. (D'ailleurs je crois pas qu'il y ait de bug qui ferait planter JIT, enfin sait-on jamais ^^)
Et le seul moyen de se prémunir contre les états du programmes indéterminés (même si ils sont, ou tout au moins semblent, impossibles à attendre... on sait jamais), ben c'est d'avoir des valeurs déterminées.
Donc on peut utiliser des valeurs par défaut automatiques, c'est le cas des membres de classe en C#. Mais dans une fonction c'est souvent contre-productif, à plus forte raison si ta fonction est petite et appelée souvent... smile
Du coup le choix de laisser l'utilisateur choisir ses valeurs est logique. Mais d'un autre coup tu ne peux plus te permettre de laisser passer des valeurs potentiellement non initialisées.
Au final tu dois écrire légèrement plus de code... Mais je pense que tu y es gagnant wink
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

24

ouais, mais je lui donne quoi en parametre? en fait, Request.Form est déjà sous une forme de hashTable pour récupérer les paramètres, genre pour champs=valeur&champ2=valeur2... on accède direct "if (Request.Form["champs"] == "valeur")", je voulais savoir si y avait une extension pour les "arrays" avec des [x] ou meme [x][y] à la fin des champs.
Tout ce qui passe pas par le port 80, c'est de la triche.

25

./23 > Ok, merci. Le but principal, je l'ai écrit en ./24.
Tout ce qui passe pas par le port 80, c'est de la triche.

26

Kevin Kofler (./11) :
Thibaut (./9) :
Je parie qu'avec GTC ça passe.

Avec TIGCC, ça passe forcément, au pire avec un warning, et si l'optimiseur reconnaît que la variable n'est pas utilisée non initialisée, sans aucun faux avertissement.

Ben le cas risque pas de se présenter vu que TIGCC ne supporte PAS le C++ / objet comme dans son exemple mad tongue
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

27

Il gère les struct. Son A est une structure, pas une classe.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

28

GoldenCrystal (./23) :
Au final tu dois écrire légèrement plus de code... Mais je pense que tu y es gagnant wink

Non, on y est perdant, l'initialisation inutile détruit la performance. Mais ça vous fans de .NET et/ou Java ne le comprendrez jamais! mad mourn
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

29

Je suis pas fan du .NET, mais c'est infiniement mieux que Java. Le langage suprême reste C++ love.
C'est clair que l'initialisation obligatoire est mauvais là. Mais ce qu'il veut dire (j'espère) c'est que c'est bien que le compilo t'oblige à coder ça proprement. Après, est-ce vraiment bien.. ça se discute (comme semblait dire Sasume).
Tout ce qui passe pas par le port 80, c'est de la triche.

30

onur (./29) :
Le langage suprême reste C++ love.

... avec Qt et les kdelibs. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité