Post #5: Intro to Ruby Classes
My Class: Right Triangles
June 22, 2015
Classes are a major part of becoming proficient at Ruby and also creating practical applications of Ruby code. I am still building my own knowledge of the concept, but here is an basic introduction and example to creating a class and using instance variables.
The class I created is called Right_triangle. It provides various methods that can be applied to a triangle to test for certain properties.
class Right_Triangle def initialize(x, y, z) @sides = Array[x, y, z] @sides.sort @a = @sides[0] @b = @sides[1] @c = @sides[2] end def right_triangle? if @a**2 + @b**2 == @c**2 puts "This is a right triangle because #{@a.to_s}^2 + #{@b.to_s}^2 = #{@c.to_s}^2." else puts "This is not a right triangle because #{@a.to_s}^2 + #{@b.to_s}^2 does not equal #{@c.to_s}^2." end end end
This is a very basic class. The instance variables are defined and initalized in the first method. I allowed a user to input any 3 integers in any order. Then in the #intialize method, I reordered them from least to greatest to make the other methods funciton more easily. You might also consider adding an argument error if the values provided are not numbers. I originally had an argument error if the 3 sides did not form a right triangle, but instead chose to create a method to assess just that. That takes us to the class method #right_triangle? that is used to assess whether the three provided side lengths do indeed form a right triangle.
We could add additonal relevant methods to our topic. Classes are great for provided a variety of methods for a specific topic or assigning a variety of attributes to a subject. Let's include a couple more methods that might fit into our Right_triangle class that uses the instance variables @a, @b, and @c to represent the sides lengths in ascending order.
class Right_Triangle def initialize(x, y, z) @sides = Array[x, y, z] @sides.sort @a = @sides[0] @b = @sides[1] @c = @sides[2] end def right_triangle? if @a**2 + @b**2 == @c**2 puts "This is a right triangle because #{@a.to_s}^2 + #{@b.to_s}^2 = #{@c.to_s}^2." else puts "This is not a right triangle because #{@a.to_s}^2 + #{@b.to_s}^2 does not equal #{@c.to_s}^2." end end def state_hypotenuse puts "The hypotenuse of this right triangle is #{@c.to_s} units." end def find_area area = @a * @b / 2.0 puts "The area of this right triangle is #{area.to_s} units." end end triangle = Right_Triangle.new(3, 4, 5) triangle.right_triangle? triangle.state_hypotenuse triangle.find_area
Now our class also contains methods that identify the hypotenuse and can calculate the area. Below our class, we are creating a new object triangle with sides 3, 4, and 5. The outcome of running our methods on the object triangle will be the following:
This is a right triangle because 3^2 + 4^2 = 5^2. The hypotenuse of this right triangle is 5 units. The area of this right triangle is 6.0 units.