OOP can be useful but there are cases where it might not be necessary, and luau OOP can be particularly hacky or hard to read. Be sure you know when and where to use it!
I'm making a game that needs to instantiate TONS of physics parts and NPCs that have slight variations on each client and replicate its whereabouts and activities to other players as quickly as possible without creating any physical objects on the server, so it'd be easier to explain where NOT to use it in my case lmao
I've been trying to learn OOP for about 3 months now and while I can most of the time follow along I just can't seem to recreate it with my own projects.
didnt want to buy your course (costs for me about 9x more than this dono) because i already know scripting, but never knew this type of stuff. keep up the work, you never know what you can learn daily.
I'm already familiar with classes in general and OOP in roblox, tho this video really made me understand the concepts more and learn few new stuff. I really appreciate the work u put in these vids.
how would I make a property of an object like color that would for example change the color of a model. In this video you only read the value of the properties.
if i made an OOP gun and i detect input on client and fire a remote event to the server, how do I know which object to fire to so i can do my gun object's ":Fire()" function?
Amazing, out of every tutorial I've tried it has always confused the crap out of me. You made Lua OOP and metatables nice and easy to understand! I have one question, is it possible to make the indexed metatable methods show up in autocomplete? Edit: Realized my studio was just bugged, ignore that! Really helpful tutorial though, got my module working :)
Yes, you would have to use the Vect2 table as the metatable itself instead of having two separate tables. Though, I'm not sure exactly why you would want to access the metamethods from objects created by the class? The purpose of having the two separate tables was to uphold the OOP principle of abstraction, where you hide unnecessary implementation details (like the metamethods) from the person who is using the class & objects.
@@crusherfire1 Oh sorry I may have mislabeled what I was trying to convey. I mean when I create an object, its methods won't show up in autocomplete. So for example if I used Vect2.new(), the :Dot() needs to be manually typed out and it will not show up in autocomplete as it does in your video. Edit: Realized my studio was just bugged, ignore that! Really helpful tutorial though, got my module working :)
Hi, this is a odd questions but im currently in amidst of making a combat system, and I've been looking for the best method for handling client knockback, with minimal delay. If you could hint me towards the right direction it would be very helpful. I've tried using body velocity via server side, but it isnt quite as smooth as id like it to be
Yeah, they usually have 1 script that goes through and requires a bunch of modules. After it requires all the modules, then the modules typically have an :Init() function to initialize them, then a :Start() function to execute any code after the initialization of the modules
I have a question, is there a problem with directly attaching a function to the table instead of using metatables? Because I usally just do somthing like function Object:Explode() or somthing like that and I wanted to know if I should go back and fix all of my modules.
If you create the functions within the objects themselves, you'll end up using more memory with the more objects you create. With metatables, all of your object functions refer back to the one place they were declared, which saves on memory.
type() is the built-in type checking function for Lua, while typeof() was specifically made for Luau. It helps you check for non-native data types in the game engine like CFrames, Vectors, Color3s, etc.
@@Noon1263 Yup, because it also allows you to check for those custom data types. If you used type() on Vectors, CFrames, etc, it would only return "userdata"
@@Noon1263 if you want to do a completely unneeded micro-optimization you can do type() for things that arent native to the engine and save micro-seconds
OOP can be useful but there are cases where it might not be necessary, and luau OOP can be particularly hacky or hard to read. Be sure you know when and where to use it!
I'm making a game that needs to instantiate TONS of physics parts and NPCs that have slight variations on each client and replicate its whereabouts and activities to other players as quickly as possible without creating any physical objects on the server, so it'd be easier to explain where NOT to use it in my case lmao
I've been trying to learn OOP for about 3 months now and while I can most of the time follow along I just can't seem to recreate it with my own projects.
@@workindadI have the opposite proble.I just naturally use OOP
didnt want to buy your course (costs for me about 9x more than this dono) because i already know scripting, but never knew this type of stuff. keep up the work, you never know what you can learn daily.
Thanks for the support! Much appreciated.
I'm already familiar with classes in general and OOP in roblox, tho this video really made me understand the concepts more and learn few new stuff. I really appreciate the work u put in these vids.
Finally I understand just what the difference between . And : and what self is, thank you so much!
W channel bro. Idk what I would do without u fr❤
11:55 I usually require the clone of the module, or delete and repaste the module.
Dude i love your videos, please make more! ❤🎉
Object-Class in a Module script allow's you to reuse that Object anywhere if you require it in a ServerScript
how would I make a property of an object like color that would for example change the color of a model. In this video you only read the value of the properties.
Have you ever thought of going into components?
if i made an OOP gun and i detect input on client and fire a remote event to the server, how do I know which object to fire to so i can do my gun object's ":Fire()" function?
Can you do a video on Functional programming next for the Functional Bros?
Perhaps 👀
Amazing, out of every tutorial I've tried it has always confused the crap out of me. You made Lua OOP and metatables nice and easy to understand!
I have one question, is it possible to make the indexed metatable methods show up in autocomplete?
Edit: Realized my studio was just bugged, ignore that!
Really helpful tutorial though, got my module working :)
Yes, you would have to use the Vect2 table as the metatable itself instead of having two separate tables. Though, I'm not sure exactly why you would want to access the metamethods from objects created by the class?
The purpose of having the two separate tables was to uphold the OOP principle of abstraction, where you hide unnecessary implementation details (like the metamethods) from the person who is using the class & objects.
@@crusherfire1 Oh sorry I may have mislabeled what I was trying to convey. I mean when I create an object, its methods won't show up in autocomplete.
So for example if I used Vect2.new(), the :Dot() needs to be manually typed out and it will not show up in autocomplete as it does in your video.
Edit: Realized my studio was just bugged, ignore that!
Really helpful tutorial though, got my module working :)
OOP is amazing! But how do you actually see tables properly in the output please tell mee
there should be a setting in the output
In the output, Click the 3 dots in the top right, then disable "Show memory address for expandable tables"
Can you talk about Test driven development and TestEz?
Hi, this is a odd questions but im currently in amidst of making a combat system, and I've been looking for the best method for handling client knockback, with minimal delay. If you could hint me towards the right direction it would be very helpful. I've tried using body velocity via server side, but it isnt quite as smooth as id like it to be
How u setup your modules? i saw alot of devs make one script named start and multiple modules?. (I hope u see my comment)
Yeah, they usually have 1 script that goes through and requires a bunch of modules. After it requires all the modules, then the modules typically have an :Init() function to initialize them, then a :Start() function to execute any code after the initialization of the modules
thanks for helping
I have a question, is there a problem with directly attaching a function to the table instead of using metatables? Because I usally just do somthing like function Object:Explode() or somthing like that and I wanted to know if I should go back and fix all of my modules.
If you create the functions within the objects themselves, you'll end up using more memory with the more objects you create. With metatables, all of your object functions refer back to the one place they were declared, which saves on memory.
Can you explain what the difference between "typeof" and "type" is? I have always used type because its less letters.
type() is the built-in type checking function for Lua, while typeof() was specifically made for Luau. It helps you check for non-native data types in the game engine like CFrames, Vectors, Color3s, etc.
@@crusherfire1Oh right, so typeof should be used most of the time?
@@Noon1263 Yup, because it also allows you to check for those custom data types. If you used type() on Vectors, CFrames, etc, it would only return "userdata"
@@crusherfire1 i wish i knew this, thank you
@@Noon1263 if you want to do a completely unneeded micro-optimization you can do type() for things that arent native to the engine and save micro-seconds
I love you
can't understand anything
Learn Python, then learn how memory works while interpreting Python
Then come back to lua, it will sound much easier like 1000x easier
Is your course on Udemy more discounted?
You can use the code in the description for 33% off!
what font do you use
JetBrains Mono
reminds me of Trump