osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Style suggestions/critiques


On 21/08/19 9:11 AM, Michael F. Stemper wrote:
> I recently wrote a couple of modules (more to come) to help me
> use the tikz package in TeX/LaTeX. Since it's all to do with
> drawing, I have a lot of points in R^2. Being unimaginative, I
> implemented them as ordered pairs (2-tuples) of floats. E.g.:
> p1 = 3,4
> p2 = 5,6
> 
> Naturally, lines are implemented as ordered pairs[1] of points:
> line = p1,p2
> 
> This all seems reasonably simple and intuitive (to me). However,
> in order to actually do some manipulation, I have stuff like:
> # Unpack the lines
> l1p1,l1p2 = line1
> l1x1,l1y1 = l1p1
> l1x2,l1y2 = l1p2
> l2p1,l2p2 = line2
> l2x1,l2y1 = l2p1
> l2x2,l2y2 = l2p2
> spattered all over. Although this is simple enough, I find it
> aesthetically unappealing.

Agreed, but could more descriptive names be used?


> Is there some better idiom that I should be using, or is this
> really in accord with The Zen of Python?
> [1] (I could have done sets, I suppose, but orientation might be
> useful at some point.)

Assuming that the code does-stuff with/to lines, eg rotate the line 0.2 
radians about some nominated rotational-center; maybe construct a class, eg

class Line():
	def __init__( self, starting_point, ending_point ):
		self.starting_point = starting_point
		self.ending_point = ending_point
	def rotate( self, angle, center ):
		...

The same could also be said for a Point class. However, if they are 
'only' Cartesian coordinates and no methods ever apply(???), then maybe 
named-tuples or a dict?
(thus able to refer to p1.x and p1.y (or p1[ "x" ], etc) )


Using examples from above:

	p1 = Point( 3, 4 )	# p1 = 3,4
	p2 = Point( 5, 6 )	# p2 = 5,6

	line = Line( p1, p2 )	# line = p1,p2

and instead of:
	> l1p1,l1p2 = line1

Do things now appear to be closer to self-documenting?


Also, we can now use:
	p1.x 	#instead of l1p1, and
	p1.y	#instead of l1p2

In fact, chances-are you won't ever do this because any point/line 
manipulation would become a method (hidden-away) within the respective 
class...
-- 
Regards =dn