Merge pull request #183 from lexaknyazev/tweaks

Style tweaks and bugfix
diff --git a/README.md b/README.md
index 0b15146..6d9fb3a 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,7 @@
 void main() {
   // Rotation of PI/2 degrees around the Y axis followed by a
   // translation of (5.0, 2.0, 3.0).
-  Matrix4 T = new Matrix4.rotationY(PI * 0.5).translate(5.0, 2.0, 3.0);
+  Matrix4 T = new Matrix4.rotationY(PI * 0.5)..translate(5.0, 2.0, 3.0);
   // A point.
   Vector3 position = new Vector3(1.0, 1.0, 1.0);
   // Transform position by T.
@@ -85,7 +85,7 @@
 void main() {
   // Rotation of 90 degrees around the Y axis followed by a
   // translation of (5.0, 2.0, 3.0).
-  Matrix4 T = new Matrix4.rotationY(PI*0.5).translate(5.0, 2.0, 3.0);
+  Matrix4 T = new Matrix4.rotationY(PI * 0.5)..translate(5.0, 2.0, 3.0);
   // Invert T.
   T.invert();
   // Invert just the rotation in T.
@@ -144,9 +144,9 @@
   // Checks if the ray intersect with the sphere and returns the distance of the
   // intersection from the origin of the ray. Would return null if no intersection
   // is found.
-  double distancFromOrigin = ray.intersectsWithSphere(sphere);
+  double distanceFromOrigin = ray.intersectsWithSphere(sphere);
   // Evaluate the position of the intersection, in this case (3.0 0.0 0.0).
-  Vector3 position = ray.at(distancFromOrigin);
+  Vector3 position = ray.at(distanceFromOrigin);
 }
 ```
 
diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart
index 94237e8..dafb779 100644
--- a/lib/src/vector_math/matrix4.dart
+++ b/lib/src/vector_math/matrix4.dart
@@ -877,8 +877,8 @@
       sz = x.z;
     } else if (x is double) {
       sx = x;
-      sy = y == null ? x : y.toDouble();
-      sz = z == null ? x : z.toDouble();
+      sy = y ?? x;
+      sz = z ?? x;
     }
     _m4storage[0] *= sx;
     _m4storage[1] *= sx;
@@ -900,8 +900,7 @@
 
   /// Create a copy of [this] scaled by a [Vector3], [Vector4] or [x],[y], and
   /// [z].
-  Matrix4 scaled(dynamic x, [double y = null, double z = null]) =>
-      clone()..scale(x, y, z);
+  Matrix4 scaled(dynamic x, [double y, double z]) => clone()..scale(x, y, z);
 
   /// Zeros [this].
   void setZero() {
diff --git a/lib/src/vector_math/vector2.dart b/lib/src/vector_math/vector2.dart
index 30b6f13..25bef11 100644
--- a/lib/src/vector_math/vector2.dart
+++ b/lib/src/vector_math/vector2.dart
@@ -61,7 +61,7 @@
   /// Generate random vector in the range (0, 0) to (1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector2.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector2(rng.nextDouble(), rng.nextDouble());
   }
 
diff --git a/lib/src/vector_math/vector3.dart b/lib/src/vector_math/vector3.dart
index d2644fa..fe315d4 100644
--- a/lib/src/vector_math/vector3.dart
+++ b/lib/src/vector_math/vector3.dart
@@ -65,7 +65,7 @@
   /// Generate random vector in the range (0, 0, 0) to (1, 1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector3.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector3(rng.nextDouble(), rng.nextDouble(), rng.nextDouble());
   }
 
diff --git a/lib/src/vector_math/vector4.dart b/lib/src/vector_math/vector4.dart
index e1f312a..086ad4f 100644
--- a/lib/src/vector_math/vector4.dart
+++ b/lib/src/vector_math/vector4.dart
@@ -71,7 +71,7 @@
   /// Generate random vector in the range (0, 0, 0, 0) to (1, 1, 1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector4.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector4(
         rng.nextDouble(), rng.nextDouble(), rng.nextDouble(), rng.nextDouble());
   }
diff --git a/lib/src/vector_math_64/matrix4.dart b/lib/src/vector_math_64/matrix4.dart
index 5878c1a..e883051 100644
--- a/lib/src/vector_math_64/matrix4.dart
+++ b/lib/src/vector_math_64/matrix4.dart
@@ -877,8 +877,8 @@
       sz = x.z;
     } else if (x is double) {
       sx = x;
-      sy = y == null ? x : y.toDouble();
-      sz = z == null ? x : z.toDouble();
+      sy = y ?? x;
+      sz = z ?? x;
     }
     _m4storage[0] *= sx;
     _m4storage[1] *= sx;
@@ -900,8 +900,7 @@
 
   /// Create a copy of [this] scaled by a [Vector3], [Vector4] or [x],[y], and
   /// [z].
-  Matrix4 scaled(dynamic x, [double y = null, double z = null]) =>
-      clone()..scale(x, y, z);
+  Matrix4 scaled(dynamic x, [double y, double z]) => clone()..scale(x, y, z);
 
   /// Zeros [this].
   void setZero() {
diff --git a/lib/src/vector_math_64/vector2.dart b/lib/src/vector_math_64/vector2.dart
index ef90099..cc951f5 100644
--- a/lib/src/vector_math_64/vector2.dart
+++ b/lib/src/vector_math_64/vector2.dart
@@ -61,7 +61,7 @@
   /// Generate random vector in the range (0, 0) to (1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector2.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector2(rng.nextDouble(), rng.nextDouble());
   }
 
diff --git a/lib/src/vector_math_64/vector3.dart b/lib/src/vector_math_64/vector3.dart
index a356ed4..7d61041 100644
--- a/lib/src/vector_math_64/vector3.dart
+++ b/lib/src/vector_math_64/vector3.dart
@@ -65,7 +65,7 @@
   /// Generate random vector in the range (0, 0, 0) to (1, 1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector3.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector3(rng.nextDouble(), rng.nextDouble(), rng.nextDouble());
   }
 
diff --git a/lib/src/vector_math_64/vector4.dart b/lib/src/vector_math_64/vector4.dart
index 5e27501..d65c8ac 100644
--- a/lib/src/vector_math_64/vector4.dart
+++ b/lib/src/vector_math_64/vector4.dart
@@ -71,7 +71,7 @@
   /// Generate random vector in the range (0, 0, 0, 0) to (1, 1, 1, 1). You can
   /// optionally pass your own random number generator.
   factory Vector4.random([math.Random rng]) {
-    rng = rng == null ? new math.Random() : rng;
+    rng ??= new math.Random();
     return new Vector4(
         rng.nextDouble(), rng.nextDouble(), rng.nextDouble(), rng.nextDouble());
   }
diff --git a/lib/src/vector_math_geometry/generators/circle_generator.dart b/lib/src/vector_math_geometry/generators/circle_generator.dart
index d49a01c..6a55dd0 100644
--- a/lib/src/vector_math_geometry/generators/circle_generator.dart
+++ b/lib/src/vector_math_geometry/generators/circle_generator.dart
@@ -17,8 +17,8 @@
   int get indexCount => (_segments) * 3;
 
   MeshGeometry createCircle(double radius,
-      {GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null,
+      {GeometryGeneratorFlags flags,
+      List<GeometryFilter> filters,
       int segments: 64,
       double thetaStart: 0.0,
       double thetaLength: math.PI * 2.0}) {
diff --git a/lib/src/vector_math_geometry/generators/cube_generator.dart b/lib/src/vector_math_geometry/generators/cube_generator.dart
index b0948a7..387354f 100644
--- a/lib/src/vector_math_geometry/generators/cube_generator.dart
+++ b/lib/src/vector_math_geometry/generators/cube_generator.dart
@@ -16,8 +16,7 @@
   int get indexCount => 36;
 
   MeshGeometry createCube(num width, num height, num depth,
-      {GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null}) {
+      {GeometryGeneratorFlags flags, List<GeometryFilter> filters}) {
     _width = width.toDouble();
     _height = height.toDouble();
     _depth = depth.toDouble();
diff --git a/lib/src/vector_math_geometry/generators/cylinder_generator.dart b/lib/src/vector_math_geometry/generators/cylinder_generator.dart
index 1cb4045..432224b 100644
--- a/lib/src/vector_math_geometry/generators/cylinder_generator.dart
+++ b/lib/src/vector_math_geometry/generators/cylinder_generator.dart
@@ -18,8 +18,8 @@
 
   MeshGeometry createCylinder(num topRadius, num bottomRadius, num height,
       {int segments: 16,
-      GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null}) {
+      GeometryGeneratorFlags flags,
+      List<GeometryFilter> filters}) {
     _topRadius = topRadius.toDouble();
     _bottomRadius = bottomRadius.toDouble();
     _height = height.toDouble();
diff --git a/lib/src/vector_math_geometry/generators/geometry_generator.dart b/lib/src/vector_math_geometry/generators/geometry_generator.dart
index 6a2171a..1fec78f 100644
--- a/lib/src/vector_math_geometry/generators/geometry_generator.dart
+++ b/lib/src/vector_math_geometry/generators/geometry_generator.dart
@@ -18,8 +18,7 @@
   int get indexCount;
 
   MeshGeometry createGeometry(
-      {GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null}) {
+      {GeometryGeneratorFlags flags, List<GeometryFilter> filters}) {
     flags ??= new GeometryGeneratorFlags();
 
     VertexAttrib positionAttrib;
diff --git a/lib/src/vector_math_geometry/generators/ring_generator.dart b/lib/src/vector_math_geometry/generators/ring_generator.dart
index d49bc71..ee7c852 100644
--- a/lib/src/vector_math_geometry/generators/ring_generator.dart
+++ b/lib/src/vector_math_geometry/generators/ring_generator.dart
@@ -19,8 +19,8 @@
   int get indexCount => (_segments) * 3 * 2;
 
   MeshGeometry createRing(double innerRadius, double outerRadius,
-      {GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null,
+      {GeometryGeneratorFlags flags,
+      List<GeometryFilter> filters,
       int segments: 64,
       double thetaStart: 0.0,
       double thetaLength: math.PI * 2.0,
diff --git a/lib/src/vector_math_geometry/generators/sphere_generator.dart b/lib/src/vector_math_geometry/generators/sphere_generator.dart
index fdb4eca..66a970f 100644
--- a/lib/src/vector_math_geometry/generators/sphere_generator.dart
+++ b/lib/src/vector_math_geometry/generators/sphere_generator.dart
@@ -18,8 +18,8 @@
   MeshGeometry createSphere(num radius,
       {int latSegments: 16,
       int lonSegments: 16,
-      GeometryGeneratorFlags flags: null,
-      List<GeometryFilter> filters: null}) {
+      GeometryGeneratorFlags flags,
+      List<GeometryFilter> filters}) {
     _radius = radius.toDouble();
     _latSegments = latSegments;
     _lonSegments = lonSegments;
diff --git a/lib/src/vector_math_geometry/mesh_geometry.dart b/lib/src/vector_math_geometry/mesh_geometry.dart
index 5eedb53..254d496 100644
--- a/lib/src/vector_math_geometry/mesh_geometry.dart
+++ b/lib/src/vector_math_geometry/mesh_geometry.dart
@@ -95,12 +95,8 @@
 
   MeshGeometry._internal(this.length, this.stride, this.attribs,
       [Float32List externBuffer]) {
-    if (externBuffer == null) {
-      buffer =
-          new Float32List((length * stride) ~/ Float32List.BYTES_PER_ELEMENT);
-    } else {
-      buffer = externBuffer;
-    }
+    buffer = externBuffer ??
+        new Float32List((length * stride) ~/ Float32List.BYTES_PER_ELEMENT);
   }
 
   MeshGeometry.copy(MeshGeometry mesh)
@@ -112,7 +108,7 @@
     buffer.setAll(0, mesh.buffer);
 
     // Copy the indices
-    if (indices != null) {
+    if (mesh.indices != null) {
       indices = new Uint16List(mesh.indices.length);
       indices.setAll(0, mesh.indices);
     }