Est-il une différence en supprimant les accolades de Si les déclarations en java
Tout en regardant thenewbostons tutoriel sur la de base de java, il nous enseigne à faire si ce type de déclarations.(Remarquez les Accolades)
if("pie"== "pie"){
System.out.println("Hurrah!");
}
J'ai donc essayé de supprimer les accolades
if("pie"== "pie")
System.out.println("Hurrah!");
Et il fonctionne toujours! Depuis que je suis nouveau à java, je ne sais pas pourquoi cela fonctionne. Et je veux savoir si la suppression(ou d'ajouter) les accolades donner des avantages/inconvénients.
- Ne pas comparer des chaînes de caractères avec
==
en Java; toujours utiliser.equals()
. - Afin de vous étonner plus, vous pouvez écrire tout cela sur la même ligne trop!
- La droite! Je viens d'apprendre qu'il y a un moment et complètement oublié!
- Je suis curieux de connaître les downvotes. Semble une question raisonnable pour quelqu'un de l'apprentissage de la programmation/Java
- Je pense qu'il y a beaucoup de gens qui downvote parce qu'ils pensent que la Question est "trop facile" / "trop évident" ... oubliant qu'ils étaient à la fois les débutants. Mais 1 upvote == 5 downvotes en termes de réputation.
- Je agry avec votre premier point, mais votre deuxième point semble être source de confusion pour moi. Comment
1 upvote == 5 downvotes
?(une question), je pense que1 upvote == 5 reputation
et5 downvotes== -10 reputation
- 1) Pourquoi êtes-vous fâché avec mon point de vue? Je suis juste de dire pourquoi je pense qu'ils le font. Je ne dis pas que je suis d'accord avec eux. (Je n'ai pas. N'est-il pas évident qu'à partir de ce que j'ai écrit??). 2) Oui, mon erreur. 1 upvote == 2.5 downvotes. Mais l'OP est avance sur les points de rep.
- hey Stephen vous manquez de lire ma phrase, je l'ai dit
AGRY with your first point
, je n'ai pas ditANGRY
- Je pense que tu veux dire "d'Accord" au Lieu de "agry"?
- J'ai seulement mal lu parce que vous miswrote il. Agry n'est pas un mot d'anglais, et pour un locuteur natif anglais (comme moi) "agry" est une faute de frappe pour "en colère" n'est pas une faute d'orthographe "d'accord". (Le "y" dans "agry" serait un court E, mais "ee" en "accord" est un long E. certes prononciation de l'anglais, les règles sont très contradictoires.)
- oui, je veux dire
Agree
- ok 🙂
Vous devez vous connecter pour publier un commentaire.
Pour un seule instruction il restera le même, mais si vous voulez le groupe de plus d'une instruction dans le bloc si vous devez utiliser des accolades.
Vous devriez voir: Blocs en Java
(exemple à partir du lien ci-dessus)
Non, il n'y a absolument aucune différence: une paire d'accolades fait plusieurs déclarations dans un seul;
if
,while
,for
, et ainsi de suite s'attendre à un seul état; si vous avez besoin de garde d'une seule instruction, vous n'avez pas besoin d'accolades.Cependant, de nombreux magasins de logiciel insistent pour avoir des accolades, même pour une seule instruction. La raison en est les erreurs de ce type:
Les déclarations ci-dessus sont trompeuses: l'indentation vous mènent à croire que les deux missions sont protégés, alors qu'en réalité, seul le premier est. La raison en est que l'espace blanc en Java est insignifiant: mise en retrait d'une déclaration n'a pas changer sa position dans le flux global du programme. Des erreurs comme ci-dessus sont très difficiles à trouver, alors l'adoption d'une règle de les prévenir en premier lieu est une bonne idée.
Comme @rajesh dit, les accolades sont facultatives lorsque le corps est dans un état unique.
Après avoir dit que, laissant les accolades, même pour une seule déclaration des cas est recommandée par certains styles de codage parce que vous (ou le programmeur qui vient après vous) sont moins susceptibles de faire des erreurs lorsque vous modifiez le code plus tard.
La deuxième impression,
Tricked you
, n'est pas réellement dans laif
, il semble juste comme ça à cause de l'indentation.Mais seulement d'un point de style, pas universellement accepté, et certainement un programmeur compétent doit être capable de lire les deux formes.
C'est une question de style qui s'applique à un certain nombre de langues, y compris Java, C++, le C et le C#.
Lorsqu'un bloc de code ne contient qu'une seule ligne, les accolades peuvent être omis. Ceci s'applique à toute structure de contrôle: if, while, for, do-while.
Par exemple, les deux boucles ci-dessous sont équivalentes.
Avantage de l'omission {}:
Votre code peut être de plus courte durée - ce qui signifie moins de ligne. Certains peuvent penser qu'il est plus lisible.
Inconvénient de l'omission {}:
Si plus tard vous souhaitez modifier votre code et avez besoin d'ajouter une autre ligne pour le bloc de code, mieux vous rappelez-vous d'ajouter les {}. Sinon, si vous écrivez le code ci-dessous:
C'est vraiment équivalent à:
Non MAIS le vrai danger se produit lorsque le code est modifié plus tard. Il est relativement facile de modifier quelque chose comme:
à
et pense que le "faire quelque chose d'autre d'important' sera exécutée uniquement lorsque someCondition est vrai. L'indentation trompe 🙂
Avec des crochets, ce danger n'est pas présent.
Si il y a une seule instruction après
if
puis les accolades ne sont pas obligatoires.Maintenant, si vous avez un bloc de code qui doit tomber sous le
if
condition, alors vous devez utiliser des accolades.Ce qui est vrai pour les
loops
ainsiIl a un inconvénient. Les réponses mentionnées ci-dessus sont correctes. Mais il ya quelques inconvénients à partir du point de vue de sécurité de choses. Ayant travaillé dans une équipe de paiements, la sécurité est beaucoup plus facteur que les motifs de ces décisions. Disons que vous avez le code suivant:
Maintenant, disons que vous avez ce code ne fonctionne pas en raison d'un problème interne. Vous souhaitez vérifier l'entrée. Afin de vous apporter la modification suivante:
Dire que vous résoudre le problème et le déploiement de ce code (et peut-être l'examinateur & vous pensez que cela ne cause pas un problème puisque ce n'est pas à l'intérieur de la "Prod" la condition). Comme par magie, votre production enregistre maintenant imprimer la carte de crédit du client de l'information qui est visible pour tout le personnel qui peut voir les logs. À dieu ne plaise, si l'un d'eux (avec l'intention de nuire) à s'emparer de ces données.
Donc pas de donner une accolade et un peu négligent de codage peut souvent conduire à la violation de la sécurité de vos informations. Il est également considéré comme une vulnérabilité dans JAVA par CERT - Génie Logiciel Institut, de la CMU.
Les accolades sont généralement pour avoir un bloc d'instructions. Sans bretelles, seulement la première ligne sera exécutée dans le
if()
déclaration. Pas tout le bloc qui commence par{
et se termine avec}
et
Noter, cependant, si vous voulez comparer deux
String
des objets, utilisez la.equals()
méthode dansString
. Cet exemple fonctionne toujours parce que c'est la comparaison d'une chaîne constante avec lui-même, ce qui est toujours vrai.C'est la même chose, si le nombre de phrases est égal à un. Si il y a plus d'un, vous avez besoin de l' { } syntaxe
Pour une seule déclaration qui n'est pas un problème
Pour deux ou plusieurs états, après, si vous avez besoin de les accolades
Également utiliser .equals() pour comparer plutôt que de ==.
Il fonctionnera bien si il y a une seule instruction après la condition if.
mais ici à la fois la déclaration de l'impression
Je vous suggère d'utiliser comme ci-dessous même si vous voulez imprimer une seule instruction.
"second statement"
sera imprimé sans condition, c'est à dire toujours imprimer.L'avantage avec l'ajout d'eux est toujours que vous pouvez simplement étendre le bloc de code plus tard, sans avoir besoin de les ajouter. Supposons que vous avez:
alors, si vous souhaitez ajouter une ligne de code supplémentaire, vous devez assurez-vous d'ajouter des accolades:
Si elles sont déjà là, il suffit de placer le curseur à la fin de la ligne, appuyez sur la touche retour et commencer à ajouter du nouveau code.
Pour une seule ligne, il n'y a pas de différence technique, mais de nombreuses conventions de programmation proposer ou même mandat pour les avoir toujours là. Il y a même un CheckStyle règle pour elle.
Non, il n'y a pas de différence entre eux avec une déclaration en réponse à la
if
. Si vous souhaitez ajouter une deuxième déclaration en réponse à laif
, puis accolades sont nécessaires.Les accolades n'est utilisé que si vous voulez exécuter des tas de code dans la condition. Si vous n'utilisez pas les accolades, alors il sera de seulement exécuter la première instruction après si la condition. Les lignes restantes (en dessous de la première déclaration) ne considérera pas comme si une partie.
Si vous ajouter des accolades pour cette si la déclaration:
Alors il ne fonctionne plus.
Donc je pense que dans certains cas, il n'importe.
Mes deux cents. Écrire deux lignes après l'instruction if sans accolades est une erreur que j'ai jamais vu, jamais fait. Cela dit, les personnes avec qui vous travaillez sont les têtes des os qui ne comprendront pas le tour de magie, vous êtes en tirant ici. Enregistrer des choses amusantes comme cela pour votre propre code, mais faire ce que vous avez dit pour les professionnels et les salles de classe.
Il y a un réel argument sur ce qui illustre raisonnable à un problème qui pourrait survenir. Comme vous le savez, tous indentation et extra espaces sont supprimés à partir de votre code quand il est analysé. Les ennuis peuvent survenir lorsque vous essayez d'utiliser une ligne de
else
déclarations après plusieurs ligneif
consolidés. Par exemple:devient indiscernable de
Même dans cette circonstance, d'un système automatique de tabulation mis en place doit indiquer
if
déclaration de laelse
pointe, mais c'est quelque chose que vous devriez certainement se méfier de si vous optez pour la jupe les règles comme je le fais souvent.