#So we start with a function:
function filter($array, $field, $pattern=false, $limit=0, $above=0){
}
#first we make an array of users
$users = Array(Array('name'=>'shaun','age'=>26),Array('name'=>'peter','age'=>60));
#now we can filter it
$newusers = filter($users, 'age', false, false, 25);
#clearly if we didn't have the definition of function right above us it would get confusing. So the first thing that would make it more legible is keyword parameters.
$newusers = filter(array:$users, field:'age', above:25);
#whats nice about that is we can leave out the params we don't need and just pass the ones we do thus allowing functions to start to become more of a DSL. Still this feels akward, what if we dropped the brackets? They're just a security blanket anyway.
$newusers = filter array:$users, field:'age', above:10;
#now we're getting somewhere but why not drop the comas and just infer from the whitespace that there are seperations?
$newusers = filter array:$users field:'age' above:25;
#sweet, but now that we can match functions why not allow "other words" to make it read more like a sentence and just have the parser ignore them? This way we don't clutter our methods, objects and keyword params with meaningless "joining words"
$newusers = filter the array:$users where field:'age' is above:25;
#that would end up getting parsed into:
$newusers = filter($users,'age',false,false,25);
#thus it does not add overhead but creates a much more readable "inline-commented" version which can thus easily modified by someone who did not write the original code or method.
#now what about the array declaration? using our concept of dropping the un-necessary lets use key:value pairs and no commas
$users = ((name:'shaun' age:25) (name:'peter' age:60));
#that definitely feels nicer than php or the json approach in my book. What is the obsession with commas? What purpose do they provide that white space does not?
#the next question is probably: what about inline expressions and or method calls i.e.
function get_users($group,$limit){}
$users = filter array:getusers group: 10 limit: 10 field:'name' pattern:'/[a-z]*/i';
#cleary we have some issues how can the parser group the arguments? well:
$users = filter array:(getusers group:10 limit:10) field:'name' pattern:'/[a-z]*/i';
#holy s-expressions batman!
No comments:
Post a Comment