Ene-atanyň we çaganyň usullary çaknyşanda!
TL; DR: Çaga synplarynyň ulanyp biljek atlary bilen ene-atalar sapaklarynda hususy usullary ulanmakdan gaça duruň.
Ene-atalar we çagalar synplarynda şol bir usul adyny ulananyňyzda, bulaşyklyk döredýärsiňiz.
Ene-atalar synpynda hususy usul, çaga synpynda şol bir at bilen köpçülige açyk bir usul bar bolsa-da, ony ýok edip bolmaz.
Bu statiki dilleriň köpüsiniň dizaýnynda ýüze çykýan mesele. Bu birikme näsazlyklara sebäp bolýar we koduňyzy saklamagy kynlaşdyrýar.
<? class ParentClass { private function greet() { // This method is private return "Hello from ParentClass"; } public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { public function greet() { // Overriding a concrete method is a code smell // Compilers SHOULD warn you return "Hello from ChildClass"; } } $child = new ChildClass(); echo $child->callGreet(); // When callGreet() is invoked on the $child object, // it executes the following: // It calls $this->greet(), // which refers to the greet() method of ParentClass // because the original method is private // and cannot be overridden or accessed from ChildClass. // The unexpected output is 'Hello from ParentClass'
<? class ParentClass { protected function greet() { // notice the 'protected qualifier' return "Hello from ParentClass"; } public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { public function greet() { return "Hello from ChildClass"; } } $child = new ChildClass(); echo $child->callGreet(); // The output is "Hello from ChildClass" // This is the standard (and wrong) solution // Also fixed by most AIs
<? abstract class ParentClass { // Declare greet() as an abstract method // Following the template-method design pattern abstract protected function greet(); public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { protected function greet() { return "Hello from ChildClass"; } } class OtherChild extends ParentClass { protected function greet() { return "Hello from OtherChild"; } } $child = new ChildClass(); echo $child->callGreet(); // Output: Hello from ChildClass $otherChild = new OtherChild(); echo $otherChild->callGreet(); // Output: Hello from OtherChild
Bu ysy ene-atalar synplarynda hususy usullary gözläp we çaga synplarynyň şol bir at bilen usullary kesgitleýändigini ýa-da ýokdugyny barlap bilersiňiz. Şeýle hem, hususy usullary çagyrýan ene-atalaryň usullaryny barlamaly.
Arassa we öňünden aýdyp boljak kod, modelleriň hakyky dünýä iýerarhiýasyny görkezmelidir.
Bir-biriniň üstünden düşýän atlar bilen şahsy usullary ulananyňyzda, model bilen ýerine ýetirişiň arasynda Bijection boşlugyny döredýärsiňiz.
Bu boşluk döredijileri bulaşdyrýar, kemçilikleri köpeldýär we arassa kod ýörelgelerini bozýar.
AI generatorlary köplenç ene-çaga gatnaşyklaryny döredenlerinde bu ysy döredýärler.
Giriş derejelerini barlap bilmezler ýa-da mirasyň netijelerini göz öňünde tutup bilmezler.
AI gurallary bu ysy anyk görkezmeler bilen düzedip biler.
AI-den bir-biriniň üstünden düşýän usul atlarynyň we refaktor iýerarhiýalarynyň bardygyny barlap bilersiňiz.
Olary synap görüň!
Rememberatda saklaň: AI kömekçileri köp ýalňyşlyk goýberýärler
Dogry görkezmeler bolmazdan | Aýratyn görkezmeler bilen |
---|---|
Ene-atalar we çagalar synplary düzülende, mirasy we elýeterliligi anyk kesgitleýän usullary ulanmaly.
Çaga usullary bilen gabat gelýän hususy usullardan gaça duruň. Bu koduňyzy okalýan, giňeldilen we arassa kod ýörelgelerine laýyklaşdyrýar.
Python ýaly diller, atlaryna garamazdan ene-atalaryň usullaryny ýok etmäge mümkinçilik berýär, Java bolsa giriş derejelerini berk ýerine ýetirýär.
C # Java- a meňzeýär. Bu tapawutlar, garaşylmadyk hereketlerden gaça durmak üçin işleýän diliňiziň anyk düzgünlerine düşünmelidigiňizi aňladýar.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxviii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-iii-t7h3zkv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
Düşündiriş: Kod yslary meniň pikirim .
Karzlar: Unsplash -da Matt Artzyň suraty
Miras gowy, ýöne berk jebisligi girizýändigini hiç wagt ýatdan çykarmaly däl.
Robert C. Martin
Bu makala, HackerNoon-daky CodeSmell seriýasynyň bir bölegi.