Hi Nacho, I wouldn't throw an error because otherwise one must know beforehand that an equation is non-resolvable or must use #on:do: everywhere. Since that when you ask to resolve an equation you get back a collection of solutions, a non-resolvable equation could just return an empty collection, couldn't it?. If you really want to consider that asking to resolve a non-resolvable equation is an error, another solution would be to provide a #rootsIfNone: method. That's a common pattern in Smalltalk. I would also rename 'checkNegative' to 'discriminant', because it's not obvious to see what that variable represents at first glance.
On 2 avr. 2014, at 15:14, nacho <0800na...@gmail.com> wrote: > Well here is again, the refactored version. > > "The idea is to have a class to calculate quadratic equations. > This second draft still only calculates real roots (leaving aside imaginary > roots). > But thanks to Damien Cassou I think it has a better style. > > A QuadraticEquation is a class used to solve Quadratic Equations of the > form: ax^2 + bx + c = 0, where a is not 0. > > You can set the coefficients using the following method > setQuadraticCoefficient: linearCoefficient: constant: " > > Object subclass: #QuadraticEquation > instanceVariableNames: 'quadraticCoefficient linearCoefficient constant > roots' > classVariableNames: '' > category: 'IS-Math' > > "I create accessors (only getters for each term) and then the following > method to set the terms" > > QuadraticEquation>>setQuadraticCoefficient: aNumber1 linearCoefficient: > aNumber2 constant: aNumber3 > quadraticCoefficient := aNumber1. > linearCoefficient := aNumber2. > constant := aNumber3 > > > > QuadraticEquation>>calculateRoots > | checkNegative | > checkNegative := linearCoefficient squared - ( 4 * > quadraticCoefficient * > constant). > > checkNegative >= 0 > ifFalse: [ Error signal: 'Negative square root'] > ifTrue: [ ^ self solveRoots: checkNegative] > > QuadraticEquation>>solveRoots: aTerm > | rootA rootB | > roots := OrderedCollection new. > rootA := (linearCoefficient negated + aTerm sqrt) / (2 * > quadraticCoefficient). > rootB := (linearCoefficient negated - aTerm sqrt) / (2 * > quadraticCoefficient). > roots add: rootA; add: rootB. > ^ roots > > > " Example: -3x^2+2x+2=0 > an OrderedCollection(-0.5485837703548636 1.2152504370215302) > > print(it) > > | anEquation | > anEquation := QuadraticEquation new. > anEquation setQuadraticCoefficient: -3 linearCoefficient: 2 constant: > 2. > anEquation calculateRoots." > > Thanks again > Best, > Nacho > > > > ----- > Nacho > Smalltalker apprentice. > Buenos Aires, Argentina. > -- > View this message in context: > http://forum.world.st/Question-on-style-tp4752165p4752262.html > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. >