# with this syntax, the order of parameters does not matter # have to use same name for parameters when passing arguments #! required and optional arguments are ordered #! order of passing parameters #! required => optional => variable => keyword #! keyword arguments => for more clarity, and removing the need for arguments to be ordered def method_1(m1:, m2:, m3:) p m1, m2, m3 end # method_1(m1:2,m9:3,m2:4) #! keyword arguments can also be optional with a default value def method_1(m1:2, m2:, m3:3) p m1, m2, m3 end #method_1(m1:20,m3:30,m2:40) # the value for m1 and m2 passed in as argument will be overwritten #! optional arguments def testing(a, b=1) p a,b end # testing (23) #! variable arguments => to capture many arguments as an ARRAY (SPLAT OPERATOR) def print_all(*args) p args end #print_all(2,3,4,5,6, alpha:"23") #! variable keyword arguments => to capture many arguments as a HASH (DOUBLE SPLAT OPERATOR) def print_all(**args) p args end #! *x and **x are both variable arguments #// if keyword argument is not passed in before variable keyword arguments, #// the keyword argument will be captured in the variable keyword argument because of the key:value notation def testing(a, b = 1, *c, d:1, **x) p a p b p c p d p x end testing('a', 10, 'c', de: 2, alpha:"num", "radon":"noble gas")