Create vs New?
BlitzMax Forums/BlitzMax Beginners Area/Create vs New?| 
 | ||
| What does using a Create Function within a Type allow you to do? Is it just a normal function? | 
| 
 | ||
| Create will let you pass parameters when creating an instance of the type. Example using new 
Type TPixel
    Field X:int
    Field Y:Int
    Method New()
        X = 10
        Y = 10
    End Method
End Type
Local Pixel:TPixel = New TPixel 'Good if I want x,y to be 10,10
Pixel.X = 15 'Otherwise, I need to manually set it up
Pixel.Y = 20 'Or create a setter method to do it
As you can see, New will allow you to initialize to default values, but not allow you to specify new values when you create the instance. Example with Create() 
Type TPixel
    Field X:int
    Field Y:Int
    Function Create:TPixel(X:Int,Y:Int)
        Local Pixel:TPIxel = New TPixel
        Pixel.X = X
        Pixel.Y = Y
        Return Pixel
    End Function
End Type
Local Pixel:TPixel = TPixel.Create(15,20) 'Now we can initialize with the values we want.
 | 
| 
 | ||
| Yes, a Create function is just a standard function. New on the other hand runs each time a type is instanciated but does not accept any parameters. | 
| 
 | ||
| To clarify, Create is not a special function. You could call it MerryChristmas if you wanted. | 
| 
 | ||
| Some ppl (well me) say that NEW shouldn't appear in open code, and in fact should be restricted to only existing in your "create" (or MerryChristmas) Function | 
| 
 | ||
| That's a good rule most of the time, but it's important to understand why. I use New for things like TLists often but for custom types I've often found myself needing creation parameters and having to go back and changing code, so it's good practice to use them from the beginning, unless it's a very simple type and always will be. |