J'ai l'intention d'écrire le contenu cette fois en me concentrant sur les choses dans lesquelles même les ingénieurs avec une certaine expérience ont tendance à tomber, donc je n'ai rien écrit de super-naturel tel que [Ne pas écrire de code en double].
**2017/03/16 Il semble être souvent vu récemment, alors ajoutez-en un [Ne pas en hériter en premier lieu !!!] **
N'en héritez que si vous ne pouvez pas vous en empêcher. Avant cela, considérez d'autres méthodes telles que le modèle de stratégie et le modèle composite, mais seulement s'il est logique d'hériter. Fondamentalement, il est plus évolutif et le code de test est plus facile à appliquer si vous n'en héritez pas.
Ne le sautez pas avec "Ah, héritage. Oui, oui." Pas vraiment !!! Presque tous les ingénieurs savent ce qu'est [is-a]. Parce que c'est un concept qui apparaît dans tous les livres de pensée objet.
Cependant, d'après mon expérience, trop de gens négligent ce concept.
[Un cadre sur le site] Mr. A: "Cette classe et la méthode de cette classe sont exactement les mêmes." Mr. B: "Ah, alors si vous créez une classe parente et la mettez ensemble, vous pouvez réduire les codes en double." Moi: "C'est ridicule !!!"
C'est vrai.
Non, je pense que c'est un bon point de départ. Cependant, si [est-a], qui est le concept le plus important dans l'héritage, est omis, il est absolument inutile. [is-a] n'est ni une décoration ni un mot de débutant, c'est un concept qui devrait être utilisé dans l'implémentation. Vous pouvez créer un cours que vous ne comprenez pas parce que vous le négligez.
Mais pour être clair, [is-a] est trop abstrait et il est assez difficile de l'abandonner au niveau de la mise en œuvre, ou il y a des différences individuelles ...
Je vais donc vous présenter une méthode de jugement spécifique, donc j'espère que vous pourrez vous y référer.
Ne vous méprenez pas, il ne l'utilise pas, il est prêt à l'emploi. Bien sûr, vous ne pouvez pas l'utiliser, donc si vous souhaitez l'utiliser, veuillez juger s'il est prêt à être utilisé. Si cela est fait, on peut dire que c'est une relation [is-a]. Donc, d'abord, si vous voulez créer une classe enfant, voyez si elle est dans cet état.
Protégez-le quand même! Si vous ne pouvez pas le garder, faites un test! (Parce que je dois le protéger) Il y a trop de méthodes avec des entrées et des sorties ambiguës. De plus, il est trop douloureux de réparer cela, je veux vraiment que vous le protégiez. Je ne peux même pas écrire un test. Sérieusement épicé Ah.
Il n'y a rien d'autre à écrire, mais veuillez en faire une méthode à laquelle on peut répondre lorsqu'on vous demande "Quelles sont les entrées et les sorties de cette méthode?"
De plus, pour être plus précis, n'effectuez pas le traitement suivant avec une seule méthode. [J'ai fait un calcul → enregistrer le résultat du calcul] Cela signifie renvoyer le résultat du calcul et le sauvegarder à l'appelant.
Ceci est également assez courant. Pourquoi ne s'arrête-t-il pas même s'il a commencé?
Il ne s'agit pas seulement de démarrer et d'arrêter, mais il existe des méthodes qui devraient être associées. N'y a-t-il pas une classe qui commence par le constructeur de l'instance et s'arrête de l'extérieur?
Rendez votre code cohérent de toute façon.
La plage de divulgation est étroite, les restrictions sont fortes et je veux être gentil Rendre toutes les méthodes Kaku privées. Après cela, veuillez publier uniquement ce dont vous avez besoin. Il est vraiment difficile de voir si vous publiez quelque chose qui n'est utilisé que dans la classe. La propriété est en lecture seule et si elle ne fonctionne toujours pas, écrivez-la.
Toutes les variables sont également const et les arguments de méthode sont également const. Limitez tout ce qui peut être restreint.
N'appelez pas le rappel dans une méthode qui contient une certaine logique.
C'est à ce moment que vous renvoyez le rappel à l'appelant. Cela signifie que la partie renvoyée de l'enfant au parent n'est pas liée à la logique.
(Tweet) Quel était le nom du code qui n'a pas écrit la logique et qui a simplement passé la valeur? J'avais un nom, mais je l'ai oublié, alors écrivez-le dans les commentaires si vous le comprenez.
**2017/03/16 J'ai demandé à Hatebu d'écrire quelque chose comme «Je ne sais pas», alors quand je l'ai examiné, j'ai pensé «C'est vrai», alors je l'ai ajouté ci-dessous. J'étais tellement en colère à ce moment-là que j'ai beaucoup écrit www **
Par exemple Supposons que vous ayez le calcul 1, le calcul 2 et le calcul 3. Supposons que vous souhaitiez renvoyer "Calcul 1 + Calcul 2 + Calcul 3" dans le rappel. Faites-le en une seule méthode
//Puisqu'il s'agit d'un rappel, il est renvoyé de manière asynchrone.
Tous les résultats de calcul{
return [Calcul 1+Calcul 2+Calcul 3]
}
ne pas
Résultat du calcul 1{
calcul de retour 1
}
Résultat du calcul 2{
calcul de retour 2
}
Résultat du calcul 3{
calcul de retour 3
}
//Puisqu'il s'agit d'un rappel, il est renvoyé de manière asynchrone.
Tous les résultats de calcul{
return [Résultat du calcul 1+Résultat du calcul 2+Résultat du calcul 3]
}
Cela signifie écrire.
Pourquoi demandes-tu? S'agit-il de celui qui est le plus facile à écrire du code de test? Les rappels sont asynchrones, il est donc difficile de tester avec la logique, non?
Je suis épuisé, comme il est écrit. Dans le code que j'ai vu, l'instance parent dans la relation [has-a] était un singleton, et l'instance enfant se plongeait dans les propriétés de l'instance parent qu'elle avait dans le singleton.
Il n'est pas nécessaire d'avoir une propriété qui référence directement le parent. Ceci est une référence mutuelle
Il y avait quelque chose comme ça dans le commentaire que j'ai vu l'autre jour.
//Exécuter sur le fil principal
Voyant cela, j'ai murmuré, "Pourquoi?" En un mot
à propos de ça.
Voici un bon exemple de ce commentaire.
//Appelé par le thread principal car il y a un traitement de dessin à la destination de l'appel.
Voici un exemple de commentaire avec réflexion
//Je ne suis pas sûr, mais quand je l'ai appelé dans le fil principal, il ne s'est plus écrasé.
En regardant ce commentaire, vous pouvez ressentir le niveau de l'ingénieur et comprendre qu'il est normal de le corriger, donc quiconque connaît la cause peut la corriger.
Pourquoi ne voyez-vous pas à nouveau les commentaires suivants?
//Exécuter sur le fil principal
Vous ne pouvez rien faire si vous ne savez pas pourquoi. Si cela se produit, les commentaires augmenteront la quantité de code que vous ne comprenez pas.
Postscript 16 août 2016 J'ai reçu un commentaire que j'ai écrit d'une personne sur le site précédent qui a vu ce message, donc je vais le présenter ici w
# koitaro 2015/09/14
# Thread.current[:request]En plongeant l'url dans et si elle contient une étape
#Le jugement est divisé, mais comme il s'agit d'une variable dite globale, il n'est pas bon de l'écrire comme ça
#Par conséquent, j'ai essayé de le refactoriser d'une manière ou d'une autre, mais il est profondément imbriqué et utilisé.
#Par conséquent, j'ai abandonné parce que je ne pouvais pas l'améliorer facilement.
#Attends le jour où le héros apparaît
Recommended Posts