ããã°ã©ãã³ã°ã«ãããæŒç®åãªãŒããŒããŒããæ·±ãæãäžããããžãã¯ã¡ãœãããã«ã¹ã¿ã ç®è¡æŒç®ãããã³ç°ãªãããã°ã©ãã³ã°èšèªã«ãããã¯ãªãŒã³ã§ä¿å®æ§ã®é«ãã³ãŒãã®ããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
æŒç®åãªãŒããŒããŒãïŒã«ã¹ã¿ã ç®è¡æŒç®ã®ããã®ããžãã¯ã¡ãœãããè§£ãæŸã€
æŒç®åãªãŒããŒããŒãã¯ãå€ãã®ããã°ã©ãã³ã°èšèªã«åãã匷åãªæ©èœã§ããããŠãŒã¶ãŒå®çŸ©ã¯ã©ã¹ã®ãªããžã§ã¯ãã«é©çšãããéã®çµã¿èŸŒã¿æŒç®åïŒ+ã-ã*ã/ã==ãªã©ïŒã®åäœãåå®çŸ©ããããšãå¯èœã«ããŸããããã«ãããç¹ã«è€éãªããŒã¿æ§é ãæ°åŠçæŠå¿µãæ±ãéã«ãããçŽæçã§èªã¿ãããã³ãŒããæžãããšãã§ããŸãããã®æ žå¿ã«ãããŠãæŒç®åãªãŒããŒããŒãã¯ãæŒç®åãšã«ã¹ã¿ã å®è£ ããªã³ã¯ããããã«ç¹å¥ãªãããžãã¯ããŸãã¯ããã³ããŒãïŒäºéã¢ã³ããŒã¹ã³ã¢ïŒã¡ãœããã䜿çšããŸãããã®èšäºã§ã¯ãæŒç®åãªãŒããŒããŒãã®æŠå¿µããã®å©ç¹ãšæœåšçãªèœãšãç©Žãæ¢ããç°ãªãããã°ã©ãã³ã°èšèªã§ã®äŸãæç€ºããŸãã
æŒç®åãªãŒããŒããŒãã®çè§£
æ¬è³ªçã«ãæŒç®åãªãŒããŒããŒãã¯ãæŽæ°ãæµ®åå°æ°ç¹åã®ãããªããªããã£ãããŒã¿åã§è¡ãã®ãšåæ§ã«ãããªãã¿ã®æ°åŠçãŸãã¯è«ççèšå·ã䜿çšããŠãªããžã§ã¯ãã«å¯Ÿããæäœãå®è¡ããããšãå¯èœã«ããŸããäŸãã°ããã¯ãã«ã衚ãã¯ã©ã¹ãããå Žåã+
æŒç®åã䜿ã£ãŠ2ã€ã®ãã¯ãã«ãå ç®ããããšæããããããŸãããæŒç®åãªãŒããŒããŒãããªããã°ãadd_vectors(vector1, vector2)
ã®ãããªç¹å®ã®ã¡ãœãããå®çŸ©ããå¿
èŠããããããã¯èªã¿ã«ããã䜿ãã«ãããã®ã«ãªãå¯èœæ§ããããŸãã
æŒç®åãªãŒããŒããŒãã¯ãæŒç®åãã¯ã©ã¹å ã®ç¹æ®ãªã¡ãœããã«ãããã³ã°ããããšã§ãããå®çŸããŸãããããã®ã¡ãœããã¯ããããžãã¯ã¡ãœããããŸãã¯ããã³ããŒã¡ãœãããïŒäºéã¢ã³ããŒã¹ã³ã¢ã§å§ãŸããçµããããïŒãšåŒã°ãããã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã§æŒç®åã䜿çšããããšãã«å®è¡ãããã¹ãããžãã¯ãå®çŸ©ããŸãã
ããžãã¯ã¡ãœããïŒãã³ããŒã¡ãœããïŒã®åœ¹å²
ããžãã¯ã¡ãœããã¯æŒç®åãªãŒããŒããŒãã®åºç€ã§ãããããã¯ãã«ã¹ã¿ã ã¯ã©ã¹ã®ç¹å®ã®åäœã«æŒç®åãé¢é£ä»ããã¡ã«ããºã ãæäŸããŸãã以äžã«ãäžè¬çãªããžãã¯ã¡ãœãããšãã®å¯Ÿå¿ããæŒç®åãããã€ã瀺ããŸãã
__add__(self, other)
: å ç®æŒç®å (+) ãå®è£ ããŸã__sub__(self, other)
: æžç®æŒç®å (-) ãå®è£ ããŸã__mul__(self, other)
: ä¹ç®æŒç®å (*) ãå®è£ ããŸã__truediv__(self, other)
: çé€ç®æŒç®å (/) ãå®è£ ããŸã__floordiv__(self, other)
: æŽæ°é€ç®æŒç®å (//) ãå®è£ ããŸã__mod__(self, other)
: å°äœæŒç®å (%) ãå®è£ ããŸã__pow__(self, other)
: çŽ¯ä¹æŒç®å (**) ãå®è£ ããŸã__eq__(self, other)
: ç䟡æŒç®å (==) ãå®è£ ããŸã__ne__(self, other)
: äžç䟡æŒç®å (!=) ãå®è£ ããŸã__lt__(self, other)
: ããå°ããæŒç®å (<) ãå®è£ ããŸã__gt__(self, other)
: ãã倧ããæŒç®å (>) ãå®è£ ããŸã__le__(self, other)
: ä»¥äžæŒç®å (<=) ãå®è£ ããŸã__ge__(self, other)
: ä»¥äžæŒç®å (>=) ãå®è£ ããŸã__str__(self)
: ãªããžã§ã¯ãã®æåå衚çŸã«äœ¿çšãããstr()
颿°ãå®è£ ããŸã__repr__(self)
: ãªããžã§ã¯ãã®æç¢ºãªè¡šçŸïŒãããã°çšã«ãã䜿ãããïŒã«äœ¿çšãããrepr()
颿°ãå®è£ ããŸã
ã¯ã©ã¹ã®ãªããžã§ã¯ãã§æŒç®åã䜿çšãããšãã€ã³ã¿ãŒããªã¿ãŒã¯å¯Ÿå¿ããããžãã¯ã¡ãœãããæ¢ããŸããã¡ãœãããèŠã€ãããšãé©åãªåŒæ°ã§ãããåŒã³åºããŸããããšãã°ãa
ãšb
ãšãã2ã€ã®ãªããžã§ã¯ãããããa + b
ãšèšè¿°ããå Žåãã€ã³ã¿ãŒããªã¿ãŒã¯a
ã®ã¯ã©ã¹å
ã§__add__
ã¡ãœãããæ¢ããa
ãself
ãšããŠãb
ãother
ãšããŠåŒã³åºããŸãã
ããã°ã©ãã³ã°èšèªããšã®äŸ
æŒç®åãªãŒããŒããŒãã®å®è£ ã¯ãããã°ã©ãã³ã°èšèªã«ãã£ãŠè¥å¹²ç°ãªããŸããPythonãC++ãããã³JavaïŒè©²åœããå Žå - Javaã¯æŒç®åãªãŒããŒããŒãã®æ©èœãéãããŠããŸãïŒã®äŸãèŠãŠã¿ãŸãããã
Python
Pythonã¯ããã®ã¯ãªãŒã³ãªæ§æãšããžãã¯ã¡ãœããã®åºç¯ãªäœ¿çšã§ç¥ãããŠããŸãã以äžã«ãVector
ã¯ã©ã¹ã®+
æŒç®åããªãŒããŒããŒãããäŸã瀺ããŸãã
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
if isinstance(other, Vector):
return Vector(self.x + other.x, self.y + other.y)
else:
raise TypeError("Unsupported operand type for +: Vector and {}".format(type(other)))
def __str__(self):
return "Vector({}, {})".format(self.x, self.y)
# Example Usage
v1 = Vector(2, 3)
v2 = Vector(4, 5)
v3 = v1 + v2
print(v3) # Output: Vector(6, 8)
ãã®äŸã§ã¯ã__add__
ã¡ãœããã2ã€ã®Vector
ãªããžã§ã¯ããã©ã®ããã«å ç®ãããã¹ãããå®çŸ©ããŠããŸããããã¯ã察å¿ããã³ã³ããŒãã³ãã®åèšãæã€æ°ããVector
ãªããžã§ã¯ããäœæããŸãã__str__
ã¡ãœããã¯ãVector
ãªããžã§ã¯ãã®ãŠãŒã¶ãŒãã¬ã³ããªãŒãªæåå衚çŸãæäŸããããã«ãªãŒããŒããŒããããŠããŸãã
å®äžçã®äŸïŒç©çã·ãã¥ã¬ãŒã·ã§ã³ã©ã€ãã©ãªãéçºããŠãããšæ³åããŠãã ããããã¯ãã«ã¯ã©ã¹ãšè¡åã¯ã©ã¹ã®æŒç®åããªãŒããŒããŒãããããšã§ãç©çåŠè ã¯è€éãªæ¹çšåŒãèªç¶ã§çŽæçãªæ¹æ³ã§è¡šçŸã§ããããã«ãªããã³ãŒãã®å¯èªæ§ãåäžãããšã©ãŒãæžå°ããŸããäŸãã°ããªããžã§ã¯ãã«ãããååïŒF = maïŒã®èšç®ã¯ããã¯ãã«ãšã¹ã«ã©ãŒã®ä¹ç®/å ç®ã®ããã«ãªãŒããŒããŒãããã*æŒç®åãš+æŒç®åãçŽæ¥äœ¿çšããŠè¡šçŸã§ããŸãã
C++
C++ã¯ãæŒç®åãªãŒããŒããŒãã®ããã«ããæç€ºçãªæ§æãæäŸããŸããoperator
ããŒã¯ãŒãã䜿çšããŠããªãŒããŒããŒããããæŒç®åãã¯ã©ã¹ã®ã¡ã³ããŒé¢æ°ãšããŠå®çŸ©ããŸãã
#include <iostream>
class Vector {
public:
double x, y;
Vector(double x = 0, double y = 0) : x(x), y(y) {}
Vector operator+(const Vector& other) const {
return Vector(x + other.x, y + other.y);
}
friend std::ostream& operator<<(std::ostream& os, const Vector& v) {
os << "Vector(" << v.x << ", " << v.y << ")";
return os;
}
};
int main() {
Vector v1(2, 3);
Vector v2(4, 5);
Vector v3 = v1 + v2;
std::cout << v3 << std::endl; // Output: Vector(6, 8)
return 0;
}
ããã§ã¯ãoperator+
颿°ã+
æŒç®åããªãŒããŒããŒãããŠããŸããfriend std::ostream& operator<<
颿°ã¯ãåºåã¹ããªãŒã æŒç®åïŒ<<
ïŒããªãŒããŒããŒãããstd::cout
ã䜿çšããŠVector
ãªããžã§ã¯ããçŽæ¥åºåã§ããããã«ããŸãã
å®äžçã®äŸïŒã²ãŒã éçºã§ã¯ãC++ã¯ãã®ããã©ãŒãã³ã¹ã®ããã«é »ç¹ã«äœ¿çšãããŸããã¯ã©ãŒã¿ããªã³ã¯ã©ã¹ãšè¡åã¯ã©ã¹ã®æŒç®åããªãŒããŒããŒãããããšã¯ãå¹ççãª3Dã°ã©ãã£ãã¯ã¹å€æã«ãšã£ãŠäžå¯æ¬ ã§ããããã«ãããã²ãŒã éçºè ã¯ãããã©ãŒãã³ã¹ãç ç²ã«ããããšãªããç°¡æœã§èªã¿ãããæ§æã䜿çšããŠå転ãã¹ã±ãŒãªã³ã°ã倿ãæäœã§ããŸãã
JavaïŒå¶éããããªãŒããŒããŒãïŒ
Javaã¯æŒç®åãªãŒããŒããŒãã®ãµããŒããéåžžã«éãããŠããŸãããªãŒããŒããŒããããå¯äžã®æŒç®åã¯ãæååé£çµã®ããã®+
ãšæé»çãªå倿ã§ãããŠãŒã¶ãŒå®çŸ©ã¯ã©ã¹ã®æŒç®åããªãŒããŒããŒãããããšã¯ã§ããŸããã
Javaã¯çŽæ¥çãªæŒç®åãªãŒããŒããŒããæäŸããŠããŸããããã¡ãœãããã§ãŒã³ããã«ããŒãã¿ãŒã³ã䜿çšããããšã§åæ§ã®çµæãéæã§ããŸãããã ããçã®æŒç®åãªãŒããŒããŒãã»ã©ãšã¬ã¬ã³ãã§ã¯ãªããããããŸããã
public class Vector {
private double x, y;
public Vector(double x, double y) {
this.x = x;
this.y = y;
}
public Vector add(Vector other) {
return new Vector(this.x + other.x, this.y + other.y);
}
@Override
public String toString() {
return "Vector(" + x + ", " + y + ")";
}
public static void main(String[] args) {
Vector v1 = new Vector(2, 3);
Vector v2 = new Vector(4, 5);
Vector v3 = v1.add(v2); // No operator overloading in Java, using .add()
System.out.println(v3); // Output: Vector(6.0, 8.0)
}
}
ã芧ã®ãšããã+
æŒç®åã䜿çšãã代ããã«ãadd()
ã¡ãœããã䜿çšããŠãã¯ãã«ã®å ç®ãå®è¡ããå¿
èŠããããŸãã
å®äžçã®äŸïŒåé¿çïŒïŒéèã¢ããªã±ãŒã·ã§ã³ã§éé¡èšç®ãéèŠãšãªãå Žåãæµ®åå°æ°ç¹ç²ŸåºŠã®èª€å·®ãé¿ããããã«BigDecimal
ã¯ã©ã¹ã䜿çšããã®ãäžè¬çã§ããæŒç®åããªãŒããŒããŒãããããšã¯ã§ããŸããããadd()
ãsubtract()
ãmultiply()
ã®ãããªã¡ãœããã䜿çšããŠBigDecimal
ãªããžã§ã¯ãã§èšç®ãå®è¡ããŸãã
æŒç®åãªãŒããŒããŒãã®å©ç¹
- ã³ãŒãã®å¯èªæ§ã®åäžïŒæŒç®åãªãŒããŒããŒãã«ãããç¹ã«æ°åŠçãŸãã¯è«ççãªæäœãæ±ãéã«ãããèªç¶ã§çè§£ããããã³ãŒããæžãããšãã§ããŸãã
- ã³ãŒãã®è¡šçŸåã®åäžïŒè€éãªæäœãç°¡æœãã€çŽæçãªæ¹æ³ã§è¡šçŸã§ããããã«ãªããå®åã³ãŒããåæžããŸãã
- ã³ãŒãã®ä¿å®æ§ã®åŒ·åïŒæŒç®åã®åäœããžãã¯ãã¯ã©ã¹å ã«ã«ãã»ã«åããããšã§ãã³ãŒãã®ã¢ãžã¥ãŒã«æ§ãé«ãŸããä¿å®ã容æã«ãªããŸãã
- ãã¡ã€ã³åºæèšèªïŒDSLïŒã®äœæïŒæŒç®åãªãŒããŒããŒãã¯ãç¹å®ã®èª²é¡é åã«ç¹åããDSLãäœæããããã«äœ¿çšã§ãããã¡ã€ã³ãšãã¹ããŒãã«ãšã£ãŠã³ãŒããããçŽæçã«ããŸãã
æœåšçãªèœãšã穎ãšãã¹ããã©ã¯ãã£ã¹
æŒç®åãªãŒããŒããŒãã¯åŒ·åãªããŒã«ã§ãããã³ãŒããæ··ä¹±ããããããšã©ãŒãèµ·ããããããããããªããããæ éã«äœ¿çšããããšãäžå¯æ¬ ã§ãã以äžã«ãæœåšçãªèœãšã穎ãšãã¹ããã©ã¯ãã£ã¹ãããã€ã瀺ããŸãã
- äºæãã¬åäœãããæŒç®åã®ãªãŒããŒããŒããé¿ããïŒãªãŒããŒããŒããããæŒç®åã¯ããã®æ
£ç¿çãªæå³ãšççŸããªãããã«åäœããå¿
èŠããããŸããäŸãã°ã
+
æŒç®åããªãŒããŒããŒãããŠæžç®ãå®è¡ããããã«ãããšãéåžžã«æ··ä¹±ãæããŸãã - äžè²«æ§ãä¿ã€ïŒ1ã€ã®æŒç®åããªãŒããŒããŒãããå Žåã¯ãé¢é£ããæŒç®åããªãŒããŒããŒãããããšãæ€èšããŠãã ãããäŸãã°ã
__eq__
ããªãŒããŒããŒãããå Žåã¯ã__ne__
ããªãŒããŒããŒãããã¹ãã§ãã - ãªãŒããŒããŒãããæŒç®åãææžåããïŒãªãŒããŒããŒãããæŒç®åã®åäœãæç¢ºã«ææžåããä»ã®éçºè ïŒãããŠå°æ¥ã®èªåèªèº«ïŒãã©ã®ããã«æ©èœããããçè§£ã§ããããã«ããŠãã ããã
- å¯äœçšãèæ ®ããïŒãªãŒããŒããŒãããæŒç®åã«äºæãã¬å¯äœçšãå°å ¥ããããšã¯é¿ããŠãã ãããæŒç®åã®äž»ãªç®çã¯ãããã衚ãæäœãå®è¡ããããšã§ããã¹ãã§ãã
- ããã©ãŒãã³ã¹ã«æ³šæããïŒæŒç®åã®ãªãŒããŒããŒãã¯ãããã©ãŒãã³ã¹ãªãŒããŒããããåŒãèµ·ããããšããããŸããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããã«ãã³ãŒãããããã¡ã€ãªã³ã°ããããã«ããŠãã ããã
- éå°ãªãªãŒããŒããŒããé¿ããïŒããŸãã«ãå€ãã®æŒç®åããªãŒããŒããŒããããšãã³ãŒããçè§£ãã«ãããä¿å®ãå°é£ã«ãªãå¯èœæ§ããããŸããæŒç®åãªãŒããŒããŒãã¯ãã³ãŒãã®å¯èªæ§ãšè¡šçŸåãå€§å¹ ã«åäžãããå Žåã«ã®ã¿äœ¿çšããŠãã ããã
- èšèªã®å¶éïŒç¹å®ã®èšèªã«ãããå¶éã«æ³šæããŠãã ãããäŸãã°ãäžè¿°ã®ããã«Javaã¯éåžžã«éããããµããŒããããããŸãããèªç¶ã«ãµããŒããããŠããªãå Žæã§æŒç®åã®ãããªåäœã匷å¶ããããšãããšãæ±ãã«ããä¿å®æ§ã®äœãã³ãŒãã«ã€ãªããå¯èœæ§ããããŸãã
åœéåã®èæ ®äºé ïŒæŒç®åãªãŒããŒããŒãã®æ žãšãªãæŠå¿µã¯èšèªã«äŸåããŸããããæååºæã®æ°åŠç衚èšãèšå·ãæ±ãéã«ã¯ãææ§ãã®å¯èœæ§ãèæ ®ããŠãã ãããäŸãã°ãäžéšã®å°åã§ã¯ãå°æ°ç¹èšå·ãæ°åŠå®æ°ã«ç°ãªãèšå·ã䜿çšãããããšããããŸãããããã®éãã¯æŒç®åãªãŒããŒããŒãã®ã¡ã«ããºã ã«çŽæ¥åœ±é¿ããŸãããããªãŒããŒããŒããããæŒç®åã®åäœã衚瀺ããããã¥ã¡ã³ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«ããã誀解ã®å¯èœæ§ã«çæããŠãã ããã
çµè«
æŒç®åãªãŒããŒããŒãã¯ãæŒç®åã®æ©èœãã«ã¹ã¿ã ã¯ã©ã¹ã§åäœããããã«æ¡åŒµã§ãã貎éãªæ©èœã§ããããžãã¯ã¡ãœããã䜿çšããããšã§ãæŒç®åã®åäœãèªç¶ã§çŽæçãªæ¹æ³ã§å®çŸ©ã§ããããèªã¿ãããã衚çŸåè±ãã§ãä¿å®æ§ã®é«ãã³ãŒãã«ã€ãªãããŸãããã ããæ··ä¹±ããšã©ãŒãåŒãèµ·ãããªãããã«ãæŒç®åãªãŒããŒããŒãã責任ãæã£ãŠäœ¿çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ããç°ãªãããã°ã©ãã³ã°èšèªã«ãããæŒç®åãªãŒããŒããŒãã®ãã¥ã¢ã³ã¹ãšå¶éãçè§£ããããšã¯ã广çãªãœãããŠã§ã¢éçºã«ãšã£ãŠäžå¯æ¬ ã§ãã