Consider operator proposal
Marek Kozieł
develop4lasu at gmail.com
Sat Mar 14 13:24:27 PDT 2009
AUTHOR: Lasu aka Marek Kozieł
OVERVIEW
FEATURE SUMMARY:
Consider operator extends language with full value support and assign value
to name and return it.
MAJOR ADVANTAGE:
It introduces natural division in variables and values.
It makes language to be more natural for human and generics easier to use.
MAJOR BENEFIT(s):
If we need to get a value, we can do that quite simple (without splitting
expression or duplicating code).
Decrease number of potential bugs (value cannot be assigned).
It can help in splitting code to proper parts; nowdays, we need to declare
variable regardless we need it or not (or make it final).
Decrease size of unnecessary code.
Method can be itself multi-thread with this, but it's far future.
MAJOR DISADVANTAGE:
Possibility to be unclear at start.
ALTERNATIVES:
Some time 'final' variables can be used, but it's more like for-each, life
is better with it.
EXAMPLES
SIMPLE EXAMPLE:
public static void standard(Resource<String,Container<Unit>> resource) {
Comparator<Resource<String,Container<Unit>>> resourceComparator
= (standard? Resource.baseComparator : Resource.extdComparator);
if (resourceComparator.compare(resource,this.last)==0) return; //
duplicate
...
}
public static void consider(Resource<String,Container<Unit>> resource) {
(standard? Resource.baseComparator : Resource.extdComparator) ::
resourceComparator;
if (resourceComparator.compare(resource,this.last)==0) return; //
duplicate
...
}
public static void standard_2(ArrayList<Resource<String,Container<Unit>>>
resources){
for (Resource<String,Container<Unit>> resource: resources){
System.out.println(resource);
}
}
public static void consider_2(ArrayList<Resource<String,Container<Unit>>>
resources){
for (::resource:resources){
System.out.println(resource);
}
}
ADVANCED EXAMPLE:
public void validLastElementState(ArrayList<Data> list){
if
(list.get(list.size()::size-1)::data.reportStare().getState()!=validState){
throw new IllegalStateException(Data.class.getSimpleName()+"("+data+")
of "+size+" elements is in wrong "+State.class.getSimpleName());
}
... other operations ...
}
> Would be compiled to:
public void validLastElementState(ArrayList<Data> list){
{
list.size()::size;
list.get(size-1)::data
if (data.reportStare().getState()!=validState){
throw new IllegalStateException(
Data.class.getSimpleName()+"("+data+") of "+size+" elements is in
wrong "+State.class.getSimpleName());
}
}
... other operations ...
}
DETAILS
SPECIFICATION:
Value :: name
Assign left side value to given name and return it.
JLS 14.14.2:
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2
EnhancedForStatement:
for ( VarDeclaration : Expression) Statement
VarDeclaration: al least one of
VariableDeclaration
ValueDeclaration
VariableDeclaration
VariableModifiersopt Type Identifier
ValueDeclaration
:: ValueName
COMPILATION:
While value is same as final variable compiling is not big problem.
TESTING:
Same as final variable.
LIBRARY SUPPORT:
No.
REFLECTIVE APIS:
No.
OTHER CHANGES:
No.
MIGRATION:
No need.
COMPATIBILITY
Compiled code can be normally executed.
REFERENCES
Consider operator proposal:
http://lasu2string.blogspot.com/2009/03/consider-operator-proposal.html
--
Pozdrowionka. / Regards.
Lasu aka Marek Kozieł
http://lasu2string.blogspot.com/
More information about the coin-dev
mailing list