Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: sdk/lib/core/object.dart

Issue 2708233003: Update documentation of Object.hashCode. (Closed)
Patch Set: Address comments. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.core; 5 part of dart.core;
6 6
7 /** 7 /**
8 * The base class for all Dart objects. 8 * The base class for all Dart objects.
9 * 9 *
10 * Because Object is the root of the Dart class hierarchy, 10 * Because Object is the root of the Dart class hierarchy,
(...skipping 14 matching lines...) Expand all
25 * [Object] instances have no meaningful state, and are only useful 25 * [Object] instances have no meaningful state, and are only useful
26 * through their identity. An [Object] instance is equal to itself 26 * through their identity. An [Object] instance is equal to itself
27 * only. 27 * only.
28 */ 28 */
29 const Object(); 29 const Object();
30 30
31 /** 31 /**
32 * The equality operator. 32 * The equality operator.
33 * 33 *
34 * The default behavior for all [Object]s is to return true if and 34 * The default behavior for all [Object]s is to return true if and
35 * only if [:this:] and [other] are the same object. 35 * only if `this` and [other] are the same object.
36 * 36 *
37 * Override this method to specify a different equality relation on 37 * Override this method to specify a different equality relation on
38 * a class. The overriding method must still be an equivalence relation. 38 * a class. The overriding method must still be an equivalence relation.
39 * That is, it must be: 39 * That is, it must be:
40 * 40 *
41 * * Total: It must return a boolean for all arguments. It should never throw 41 * * Total: It must return a boolean for all arguments. It should never throw
42 * or return `null`. 42 * or return `null`.
43 * 43 *
44 * * Reflexive: For all objects `o`, `o == o` must be true. 44 * * Reflexive: For all objects `o`, `o == o` must be true.
45 * 45 *
46 * * Symmetric: For all objects `o1` and `o2`, `o1 == o2` and `o2 == o1` must 46 * * Symmetric: For all objects `o1` and `o2`, `o1 == o2` and `o2 == o1` must
47 * either both be true, or both be false. 47 * either both be true, or both be false.
48 * 48 *
49 * * Transitive: For all objects `o1`, `o2`, and `o3`, if `o1 == o2` and 49 * * Transitive: For all objects `o1`, `o2`, and `o3`, if `o1 == o2` and
50 * `o2 == o3` are true, then `o1 == o3` must be true. 50 * `o2 == o3` are true, then `o1 == o3` must be true.
51 * 51 *
52 * The method should also be consistent over time, so equality of two objects 52 * The method should also be consistent over time,
53 * should not change over time, or at least only change if one of the objects 53 * so whether two objects are equal should only change
54 * was modified. 54 * if at least one of the objects was modified.
55 * 55 *
56 * If a subclass overrides the equality operator it should override 56 * If a subclass overrides the equality operator it should override
57 * the [hashCode] method as well to maintain consistency. 57 * the [hashCode] method as well to maintain consistency.
58 */ 58 */
59 external bool operator==(other); 59 external bool operator==(other);
60 60
61 /** 61 /**
62 * Get a hash code for this object. 62 * The hash code for this object.
63 * 63 *
64 * All objects have hash codes. Hash codes are guaranteed to be the 64 * A hash code is a single integer which represents the state of the object
65 * same for objects that are equal when compared using the equality 65 * that affects [==] comparisons.
66 * operator [:==:]. Other than that there are no guarantees about 66 *
67 * the hash codes. They will not be consistent between runs and 67 * All objects have hash codes.
68 * there are no distribution guarantees. 68 * The default hash code represents only the identity of the object,
69 * 69 * the same way as the default [==] implementation only considers objects
70 * If a subclass overrides [hashCode] it should override the 70 * equal if they are identical (see [identityHashCode]).
71 * equality operator as well to maintain consistency. 71 *
72 * If [==] is overridden to use the object state instead,
73 * the hash code must also be changed to represent that state.
74 *
75 * Hash codes must be the same for objects that are equal to each other
76 * according to [==].
77 * The hash code of an object should only change if the object changes
78 * in a way that affects equality.
79 * There are no further requirements for the hash codes.
80 * They need not be consistent between executions of the same program
81 * and there are no distribution guarantees.
82 *
83 * Objects that are not equal are allowed to have the same hash code,
84 * it is even technically allowed that all instances have the same hash code,
85 * but if clashes happen too often, it may reduce the efficiency of hash-based
86 * data structures like [HashSet] or [HashMap].
87 *
88 * If a subclass overrides [hashCode], it should override the
89 * [==] operator as well to maintain consistency.
72 */ 90 */
73 external int get hashCode; 91 external int get hashCode;
74 92
75 /** 93 /**
76 * Returns a string representation of this object. 94 * Returns a string representation of this object.
77 */ 95 */
78 external String toString(); 96 external String toString();
79 97
80 /** 98 /**
81 * Invoked when a non-existent method or property is accessed. 99 * Invoked when a non-existent method or property is accessed.
82 * 100 *
83 * Classes can override [noSuchMethod] to provide custom behavior. 101 * Classes can override [noSuchMethod] to provide custom behavior.
84 * 102 *
85 * If a value is returned, it becomes the result of the original invocation. 103 * If a value is returned, it becomes the result of the original invocation.
86 * 104 *
87 * The default behavior is to throw a [NoSuchMethodError]. 105 * The default behavior is to throw a [NoSuchMethodError].
88 */ 106 */
89 external dynamic noSuchMethod(Invocation invocation); 107 external dynamic noSuchMethod(Invocation invocation);
90 108
91 /** 109 /**
92 * A representation of the runtime type of the object. 110 * A representation of the runtime type of the object.
93 */ 111 */
94 external Type get runtimeType; 112 external Type get runtimeType;
95 } 113 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698