empty_collections 2.0.0 copy "empty_collections: ^2.0.0" to clipboard
empty_collections: ^2.0.0 copied to clipboard

provides empty collection classes with const constructor and access to remove methods (which differs from other unmodifiable implementations)

empty_collections Build Status #

The package empty_collections contains const implementations for several collection classes that allow access to there remove-functionality:

const EmptyIterator, const EmptyIterable, const EmptySet, const EmptyMap, const EmptyList, const EmptyLinkedList and const EmptyQueue.

All these classes have been implemented as permanently empty collection classes with a const constructor. This makes these classes highly efficient and e.g. usable as default arguments for optional parameters. The difference from other unmodifiable implementations (e.g. const [], const {}, const UnmodifiableSetView.empty() from the collection package) is that these classes don't adhere to the unmodifiable convention that disallows both: adding methodes (like add(...), insert(...), putIfAbsent(...), []=, ...) and removing methodes (like remove(...), clear(), retainWhere(...), ...). The thing is for empty collections the normal remove semantic doesn't change the state of the collection! E.g. a call to emptySet.clear() does nothing on an empty set, a call to emptyList.remove(o) will just return false, because o wasn't an element of the empty list to start with.

So there is no harm in allowing remove-functionality while the adding-functionlity is still of limits.

Usage #

A simple usage example:

import 'package:empty_collections/empty_collections.dart';

main() {
  // use empty collection as default values
  var args = const EmptyList();
  if(userProvidesArgs()) {
    args = getUserProvidedArgs();
  }
  // remove-functionality doesn't throw exceptions!
  // in this specific case remove returns false
  // because "stupid option" wasn't an element of the empty list to start with
  args.remove("stupid option");
  
  // if you want to make sure you can add elements at some point, use toList(growable: true)
   args = args.toList(growable: true);
   args.add("important option");
   ...
}

// use empty collections as default values for optional parameters
void someMethodeWithOptionParameter([Map<String, String> environmentVariables = const EmptyMap, bool ignoreEnv = true]) {
  if(ignoreEnv) {
    // empty collections can be cleared without problems (because they are already empty to start with)
    environmentVariables.clear();
  }
  ...
}

Features and bugs #

Please file feature requests and bugs at the issue tracker.

0
likes
40
pub points
0%
popularity

Publisher

unverified uploader

provides empty collection classes with const constructor and access to remove methods (which differs from other unmodifiable implementations)

Repository (GitHub)
View/report issues

License

MIT (LICENSE)

More

Packages that depend on empty_collections