The advantage of using dynamic arrays (REDIM) is that they can be resized as needed where static DIM arrays can not be. Perfect for reading a script into a program that "plays" any amount of scripts like Player did (not just Eliza's). Use any editor to write the script, you don't have to worry about writing indexes for the function PLUS edit the script all you want, no sweat for Player app.
The advantage of using Functions instead of arrays is:
1. You never get an error if you request an "out of bounds" item, you just get nothing "" for string arrays.
2. For unchanging strings you can "LOAD" your data without loading anything at start of program, Beautiful!
Specially for someone using a heck of allot of CONSTANT strings PLUS you don't have an extra file you have to manage in a zip package if you want to share your program (which chatbot or Player app required a script for keywords). PLUS if you want to add to the String constants just add another line to your "FUNCTION".
3. Not recommended for strings you may want to change, because you can't, whereas with a normal array you can and that is why we love them so ;D
I see by Ron's question he is missing the UBOUND function that arrays have, so here is a suggestion for Array Functions, make item (0) the count of the strings the function contains, then to get the UBOUND of the function it is
nItemsOfMyArrayFunction = VAL(myArrayFunction$(0))
always number the strings 1 to N and put N into myFunction$(0)