Welcome to the Treehouse Community
The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.
SERGIO RODRIGUEZ17,532 Points
Why are class methods useful? Are they good practice?
I took the whole Learn Ruby track and class methods where not mentioned anywhere.
I find this class methods strange, why are they useful? Are they good practice?
Jessica H16,612 Points
Here's a spec for a local method :
describe '#description' do it 'describes what task is being done' do test_task = Task.new("wash the dishes") test_task2 = Task.new("feed the dog") expect(test_task.description).to eq "wash the dishes" end end
I am calling the description method on a string so that I can get just this string back, or some other strings that I put inside it. I called for test_task back instead of test task 2.
describe '.all' do it 'empty at first' do expect(Task.all).to eq  end end
I am calling the all method on the entire class, so that I can get a list (array) back of all the tasks that I added to the array. Right now it is empty, so I have to add a "local" save method below.
describe '#save' do it 'adds task and saves to the list' do test_task = Task.new("go to the grocer") test_task2 = Task.new("cook dinner for kids") test_task.save test_task2.save expect(Task.all).to eq [test_task, test_task2] end end
So now that class method gave me back all the things I added within it instead of one thing like "description." The class method would be able to take everything within itself and do something.
When you want the class method to have access to everything within it, then it makes sense. It just depends on what the method is. In general, it wont be doing too much work. What if "save" was a class method? Somehow I think it would just change and overwrite everything to whatever you put in, rather than add multiple things to the list
Other methods to keep in mind are .clear and .find.
The find or search method would look through all of the things you add in your program and give back a specific one.
I don't know if this helps. Sorry :)