Miközben egy kétdimenziós vektorosztályt fejlesztek egy matematikai könyvtár részeként, stilisztikai és használhatósági okokból fontolgatom statikus és példánymetóduspárok használatát. Vagyis két egyenértékű függvény, de az egyik statikus és nem mutáló, a másik pedig példányos és mutáló. Tudom, hogy nem én vagyok az első, aki fontolóra veszi ezt a problémát (Lásd itt például), de nem találtam olyan információt, amely közvetlenül foglalkozna vele.
A statikus és példánymetóduspárok előnyei:
- Vannak, akik szívesebben használják az egyiket vagy a másikat, és bizonyos esetekben a választás lehetősége megkönnyíti a kód olvashatóságát.
Ez arra utal, hogy a statikus metódusok nem mutatnak mutációt, ha statikus és példányos módszerek is rendelkezésre állnak. Ez sokkal világosabbá teheti a hívókódot, például:
someVector = Vector2d.add(vec1, vec2); someVector = (new Vector2d(vec1)).add(vec2); // does the same thing although more convoluted. // similarly adding directly to a vector is simpler with a mutator method. someVector.add(vec2); someVector = Vector2d.add(someVector, vec2);
Ez különösen fontos, ha hosszú függvényhívási láncokat használunk, ami általános a vektoroknál.
A helyben végzett műveletek számításilag gyorsabbak lehetnek, mint minden művelethez új példányt létrehozni. A felhasználó dönti el, mikor fontos a teljesítmény. A Vector osztály felhasználói számára a teljesítmény fontos lehet, mivel a vektorokat gyakran használják a számítási szempontból költséges kódokban.
A statikus vagy példányos metódusok előnyei, de mindkettő nem:
Nincs jelentős kódredundancia. Könnyebb karbantartani.
Kevesebb puffadás. A javadok majdnem feleakkora lesz.
Nem szükséges tájékoztatni a felhasználókat arról, hogy a statikus módszerek soha nem, és a nem getter példányos módszerek mindig mutálódnak.
Mennyire rossz a statikus/példány módszerpárok megléte? Használják valamelyik nagyobb könyvtárban?
Széles körben ismert a „statikus metódusok nem mutálódnak, a példánymetódusok” minta?