As a Roblox developer, it is annoying to iterate through the children of an Instance that are a specific class because everything has to be wrapped in a check for its class. This comes up when designing UI, specifically procedurally generated lists and grids, as UIConstraints are used to sort these and have to be inside of the object they’re sorting the children of.
A GetChildrenOfClass method would make this much easier as the filtering would already be done and iteration would not have to be wrapped in an if-statement.
It would also be helpful to have a similiar method that uses class inheritance like IsA, though the naming convention might be a bit weird (GetChildrenWhichAre?). The use case for an inheritance respecting equivalent is the same as the GetChildrenOfClass, but it would be helpful to iterate through GuiObjects for example instead of just Frames.
Usecase: You are writing a custom player spawning system and want spawn location parts to behave as they do normally without having to tag them or put them all in one folder, simply call Workspace:GetDescendantsOfClass("SpawnLocation") to get them all.
Usecase 2: You want to get every basepart under an instance to change their color you would call container:GetDescendantsThatAre("BasePart")
This addition would also simplify some common patterns
for _, instance in pairs(container:GetChildren()) do
if instance:IsA("BasePart") then
-- do thing
end
end
would become:
for _, basePart in pairs(container:GetChildrenThatAre("BasePart")) do
-- do thing
end
Bumping, please add. Bringing this up because a C++ implementation would be a lot faster than looping over hundreds/thousands of instances with if statements.
This would’ve been insanely useful in the Audio Discovery plugin which scans the entire DataModel for audio instances and does it on the Lua side, I’m sure performance would’ve been gained if it had an Instance method.
I’m requesting this for performance, not to save writing code in a util module, sure a lot of performance optimisations could be made if this had a C implementation.