Déclarer les variables derrière la boucle ou à l'intérieur de la boucle ? - page 6

 
Georgiy Merts:

Personnellement, je n'aime pas du tout avoir un tas de variables éparpillées dans un programme et devoir chercher à chaque fois où une variable est créée. C'est pourquoi, dans la mesure du possible, j'essaie de déclarer les variables au début d'une fonction, toutes ensemble - juste pour voir où elles sont créées et pour comprendre quand elles sont sur le point d'être supprimées.

Que voulez-vous dire par "dispersée dans tout le programme" ? Une variable locale est déclarée et appliquée uniquement dans le bloc où elle est utilisée, et si vous devez la chercher, cela signifie que votre code est si long que vous ne pouvez pas la trouver.

Déclarer toutes les variables au début d'une fonction n'est qu'un mauvais style archaïque. Même le vieux Strastrup a insisté pour que l'on se débarrasse de ces vestiges de l'ancien C enfaveur d'un code correct et fiable : déclarer une variable là où elle est utilisée. Vous ne vous rendez pas compte que votre approche est truffée d'erreurs aléatoires. Initialisez-vous les variables avec quelque chose ? Ou vous contentez-vous de "vous la couler douce" et de nettoyer ensuite le comportement imprévisible du code ? ) Peut-être qu'autrefois, tout cela était justifié en raison de la faible puissance du matériel et de la faiblesse des compilateurs, mais certainement plus maintenant.

 
pivalexander:

Vous êtes toujours se moquer des livres et de l'éloge de vous-même, mais l'essence de la question et n'a pas dit quoi que ce soit, mais la théorie autour du buisson, le lire, vous comprendrez ... La mémoire et l'unité centrale, l'unité centrale et la mémoire, l'alimentation électrique - elle est aussi utilisée là !

En revanche, ceux qui ont besoin de comprendre le sens de mes textes, et les misérables programmeurs ont toujours besoin d'être nourris à la cuillère et de donner une réponse toute faite sur un plateau d'argent, ils ne veulent jamais rien comprendre. Par conséquent, mes recommandations, bien qu'elles soient écrites en réponse à vous, ne sont probablement pas destinées à vous, mais à ceux qui veulent apprendre et amener leurs compétences à la perfection.

Je crois qu'il y a deux types de personnes - celles qui, ayant vu un râteau sur leur chemin, déterminent seulement par test le résultat en marchant dessus, et celles qui, connaissant les lois élémentaires de la physique, les données sur le poids des éléments, peuvent dire le résultat à l'avance sans marcher dessus.

 
Alexey Navoykov:

Déclarer toutes les variables au début d'une fonction n'est qu'un mauvais style archaïque - même le vieux Strastrup conseillait vivement de se débarrasser de ces vestiges de l'ancien C en faveur d'un code correct et fiable : déclarer la variable directement là où elle est utilisée.

imho, bravo ! - de manière convaincante, lorsque l'on utilise des variables en portée locale, il est moins probable de tomber sur une variable non initialisée, ou plutôt sur une valeur qui se trouvait dans l'utilisation précédente de la variable, le compilateur ne générera pas d'avertissement, et la recherche de ces petites vilenies est fastidieuse

Pour le sujet et les tests, eh bien, à peu près rien, plus de 5-7% de la différence n'est pas visible, et il n'est pas un fait que le comportement dans les prochaines builds ne changera pas

 
Aleksandr Matveev:

Ceux qui ont besoin - le sens de mes textes comprendront, et malheur aux programmeurs qui ont toujours besoin de mâcher et de donner une réponse toute prête sur un plateau, ils ne veulent jamais rien comprendre. Par conséquent, mes recommandations, bien qu'elles soient écrites en réponse à vous, ne sont probablement pas pour vous, mais pour ceux qui veulent apprendre et amener leurs compétences à la perfection.

Je crois qu'il y a deux types de personnes - celles qui, ayant vu un râteau sur leur chemin, déterminent par test le résultat en marchant dessus, et celles qui, connaissant les lois élémentaires de la physique, les données sur le poids des éléments, peuvent prédéterminer le résultat sans marcher dessus.

Je crois qu'il y a deux types de personnes - celles qui ont une hauteur de vue exagérée, celles qui sont venues pour amuser votre amour-propre et elles n'ont pas de commentaires vraiment utiles sur le sujet ici, à mon avis elles ne l'ont même pas creusé ....

et il y a ceux... Peu importe, ce n'est pas vous de toute façon :)

Aleksandr Matveev:

J'ai le sentiment que l'auteur de cette déclaration n'a aucune idée du fonctionnement du processeur, de la mémoire et du compilateur... Je parie que n'importe lequel de vos codes peut être accéléré au moins dix fois, voire des centaines de fois. À cause de ces codeurs de merde, la plupart des produits sont d'une lenteur insupportable sur les ordinateurs les plus puissants dotés de dizaines de cœurs, alors qu'il suffit de réfléchir un peu... Mais certaines personnes pensent : "Pourquoi penser ? Vous devez coder..."

Et j'ai le sentiment que vous êtes toujours bloqué au niveau de"87, en commençant par l'EC1020 et le ZX Spectrum,"

"Shitcoder" c'est toi, c'est pour ça que tu as engagé 600 personnes...

Aucune infraction

PS : accélère mon code, ok, pas par centaines mais au moins par dizaines de fois, le code est au début du fil, dans le premier post, si tu n'es pas un shitcoder bien sûr, tu peux accélérer n'importe lequel de mes codes par 10 ou 100 fois, allez...

 
pivalexander:

Je pense qu'il y a deux types de personnes : celles qui ont une prétention exagérée, celles qui viennent pour amuser leur ego et qui n'ont pas un seul commentaire vraiment utile sur le sujet, à mon avis elles n'ont même pas approfondi le sujet.

et il y a ceux... Peu importe, ce n'est pas vous de toute façon :)

Et j'ai le sentiment que tu es toujours bloqué au niveau de"87 ans à partir de EU1020 et ZX Spectrum,"

"Shitcoder" c'est toi, c'est pour ça que tu as engagé 600 personnes...

Aucune infraction

six pages de discussion de telles inepties, je suis tranquillement livide ))))) la dégradation du forum est évidente ;)))

 
Igor Makanu:

imho, bravo ! - de manière convaincante, lorsque l'on utilise des variables en portée locale, il est moins probable de tomber sur une variable non initialisée, ou plutôt sur une valeur qui se trouvait dans l'utilisation précédente de la variable, le compilateur ne générera pas d'avertissement, et la recherche de ces petites vilenies est fastidieuse

Pour le sujet et les tests, eh bien, à peu près rien, plus de 5-7% de différence n'est pas visible, et ce n'est pas un fait que le comportement dans les prochaines builds ne changera pas

Savez-vous que déclarer une variable locale sans initialisation ne garantit pas qu'elle ait une valeur nulle ? Après tout, il est créé sur la pile et tout peut s'y trouver.

void Func()
{
   int n = 0;// только так
   ....
}
P.S. Je suis moi-même tombé dans le péché de la discussion ;))
 
Igor Makanu:

sur le sujet et les tests, eh bien, c'est à peu près rien, pas plus de 5-7% de différence peut être vu, et il n'est pas certain que le comportement ne changera pas dans les prochaines builds

Oui, eh bien, idéalement, il ne devrait y avoir aucune différence, car la situation est assez simple à optimiser. Et même si le corps de la boucle est placé dans une fonction distincte, ce sera la même chose, j'en suis sûr. Mais les paranoïaques devront glisser cette chaîne par référence dans une fonction, ce qui compliquera le code ;)
 
Alexey Navoykov:
Oui, idéalement il ne devrait pas y avoir de différence du tout puisque la situation est assez simple à optimiser. Et même si on met le corps de la boucle dans une fonction séparée, ce sera la même chose, j'en suis sûr. Mais les paranoïaques devront glisser cette chaîne par référence dans une fonction, ce qui compliquera le code ;).

Les résultats des tests devraient varier de 5 à 15% d'un démarrage à l'autre, le vent n'est pas un système d'exploitation en temps réel.

 
Alexey Volchanskiy:

Savez-vous que déclarer une variable locale sans initialisation ne garantit pas qu'elle ait une valeur nulle ? Après tout, il est créé sur la pile et tout peut s'y trouver.

P.S. Ici, je suis tombé dans le péché de discuter moi-même ;))

))))) Wow !

SZZ : l'initialisation lors de la déclaration d'une variable est la base pour écrire tout code avec un minimum d'erreurs... même le compilateur vous dira quelque chose ;)

 
Igor Makanu:

))))) Ouah !

ZS : l'initialisation lors de la déclaration d'une variable est la base pour écrire tout code avec un minimum d'erreurs... même le compilateur dira quelque chose ici ;)

Je viens de rencontrer un groupe de personnes qui pensent que le compilateur se concentre sur les variables locales comme il le fait pour les variables globales.

Et le compilateur ne donne pas de mandats

void OnTimer()
{
    string st;
    int n;
    Print(st, n);// специально печатаем неиниализированные, варнингов нет
    for (int i = 0; i < 1000; i++)
    {
        st = IntegerToString(i);
    }
}
Raison: