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

Side by Side Diff: src/site/articles/style-guide/index.markdown

Issue 959553002: Update the Style Guide (Closed) Base URL: https://github.com/dart-lang/www.dartlang.org.git@master
Patch Set: Created 5 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 --- 1 ---
2 layout: article 2 layout: article
3 title: "Dart Style Guide" 3 title: "Dart Style Guide"
4 rel: 4 rel:
5 author: bob-nystrom 5 author: bob-nystrom
6 description: "Follow these guidelines for consistent, readable Dart code." 6 description: "Follow these guidelines for consistent, readable Dart code."
7 has-permalinks: true 7 has-permalinks: true
8 article: 8 article:
9 written_on: 2011-10-27 9 written_on: 2011-10-27
10 updated_on: 2015-02-17 10 updated_on: 2015-02-17
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 } 599 }
600 {% endprettify %} 600 {% endprettify %}
601 </div> 601 </div>
602 602
603 603
604 ## Names 604 ## Names
605 605
606 #### DO name types using `UpperCamelCase`. 606 #### DO name types using `UpperCamelCase`.
607 {:.no_toc} 607 {:.no_toc}
608 608
609 Classes and typedefs should capitalize the first letter of each word (including 609 Classes, enums, and typedefs should capitalize the first letter of each word
610 the first word), and use no separators. 610 (including the first word), and use no separators.
611 611
612 <div class="good" markdown="1"> 612 <div class="good" markdown="1">
613 {% prettify dart %} 613 {% prettify dart %}
614 class SliderMenu { 614 class SliderMenu {
615 // ... 615 // ...
616 } 616 }
617 617
618 class HttpRequest { 618 class HttpRequest {
619 // ... 619 // ...
620 } 620 }
621 621
622 typedef num Adder(num x, num y); 622 typedef num Adder(num x, num y);
623 {% endprettify %} 623 {% endprettify %}
624 </div> 624 </div>
625 625
626 626
627 #### PREFER using `lowerCamelCase` for constant names. 627 #### PREFER using `lowerCamelCase` for constant names.
628 {:.no_toc} 628 {:.no_toc}
629 <!-- https://github.com/dart-lang/www.dartlang.org/issues/831 --> 629 <!-- https://github.com/dart-lang/www.dartlang.org/issues/831 -->
630 630
631 In new code, use `lowerCamelCase` for constant variables. 631 In new code, use `lowerCamelCase` for constant variables, including enum
632 values.
632 633
633 In existing code that uses `ALL_CAPS_WITH_UNDERSCORES` for constants, you 634 In existing code that uses `ALL_CAPS_WITH_UNDERSCORES` for constants, you
634 may continue to use all caps to stay consistent. 635 may continue to use all caps to stay consistent.
635 636
636 <div class="good"> 637 <div class="good">
637 {% prettify dart %} 638 {% prettify dart %}
638 const pi = 3.14; 639 const pi = 3.14;
639 const defaultTimeout = 1000; 640 const defaultTimeout = 1000;
640 final urlScheme = new RegExp('^([a-z]+):'); 641 final urlScheme = new RegExp('^([a-z]+):');
641 642
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 Readability studies show that long lines of text are harder to read because your 1003 Readability studies show that long lines of text are harder to read because your
1003 eye has to travel farther when moving to the beginning of the next line. This is 1004 eye has to travel farther when moving to the beginning of the next line. This is
1004 why newspapers and magazines use multiple columns of text. 1005 why newspapers and magazines use multiple columns of text.
1005 1006
1006 If you really find yourself wanting lines longer than 80 characters, our 1007 If you really find yourself wanting lines longer than 80 characters, our
1007 experience is that your code is likely too verbose and could be a little more 1008 experience is that your code is likely too verbose and could be a little more
1008 compact. Do you really need to call that class 1009 compact. Do you really need to call that class
1009 `AbstractWidgetFactoryManagerBuilder`? 1010 `AbstractWidgetFactoryManagerBuilder`?
1010 1011
1011 1012
1012 #### DO place the operator on the preceding line in a multi-line expression. 1013 #### DO place binary operators on the preceding line in a multi-line expression.
1013 {:.no_toc} 1014 {:.no_toc}
1014 1015
1015 There are valid arguments for both styles but most of our code seems to go this 1016 There are valid arguments for both styles but most of our code seems to go this
1016 way, and consistency matters most. 1017 way, and consistency matters most.
1017 1018
1018 <div class="good"> 1019 <div class="good">
1019 {% prettify dart %} 1020 {% prettify dart %}
1020 if (isDeepFried || 1021 if (isDeepFried ||
1021 (hasPieCrust && !vegan) || 1022 (hasPieCrust && !vegan) ||
1022 containsBacon) { 1023 containsBacon) {
(...skipping 12 matching lines...) Expand all
1035 </div> 1036 </div>
1036 1037
1037 <div class="bad"> 1038 <div class="bad">
1038 {% prettify dart %} 1039 {% prettify dart %}
1039 bobLikes() 1040 bobLikes()
1040 => isDeepFried || (hasPieCrust && !vegan) || containsBacon; 1041 => isDeepFried || (hasPieCrust && !vegan) || containsBacon;
1041 {% endprettify %} 1042 {% endprettify %}
1042 </div> 1043 </div>
1043 1044
1044 1045
1046 #### DO place ternary operators on the next line in a multi-line expression.
1047 {:.no_toc}
1048
1049 Also, if you break the line before one of the operators, prefer breaking
1050 around both.
1051
1052 <div class="good">
1053 {% prettify dart %}
1054 return someCondition
1055 ? whenTrue
1056 : whenFalse;
1057 {% endprettify %}
1058 </div>
1059
1060 <div class="bad">
1061 {% prettify dart %}
1062 return someCondition ?
1063 whenTrue : whenFalse;
Bob Nystrom 2015/02/26 00:19:52 Let's make this one: return someCondition ? whe
Kathy Walrath 2015/02/26 16:15:14 Done.
1064 return someCondition ?
1065 whenTrue :
1066 whenFalse;
1067 {% endprettify %}
Bob Nystrom 2015/02/26 00:19:52 Also, maybe swap the order of the bad examples so
Kathy Walrath 2015/02/26 16:15:14 Done.
1068 </div>
1069
1070
1045 #### DO place the `.` on the next line in a multi-line expression. 1071 #### DO place the `.` on the next line in a multi-line expression.
1046 {:.no_toc} 1072 {:.no_toc}
1047 1073
1048 This supercedes the previous rule. Unlike other operators, if you split an 1074 This supercedes the previous rule. Unlike other operators, if you split an
1049 expression on a `.`, then put that at the beginning of the second line. 1075 expression on a `.`, then put that at the beginning of the second line.
1050 1076
1051 <div class="good"> 1077 <div class="good">
1052 {% prettify dart %} 1078 {% prettify dart %}
1053 someVeryLongVariable.withAVeryLongProperty 1079 someVeryLongVariable.withAVeryLongProperty
1054 .aMethodOnThatObject(); 1080 .aMethodOnThatObject();
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
1520 'Wear your wildest ${decade}s outfit.' 1546 'Wear your wildest ${decade}s outfit.'
1521 {% endprettify %} 1547 {% endprettify %}
1522 </div> 1548 </div>
1523 1549
1524 <div class="bad"> 1550 <div class="bad">
1525 {% prettify dart %} 1551 {% prettify dart %}
1526 'Hi, ${name}!' 1552 'Hi, ${name}!'
1527 "Wear your wildest ${decade}'s outfit." 1553 "Wear your wildest ${decade}'s outfit."
1528 {% endprettify %} 1554 {% endprettify %}
1529 </div> 1555 </div>
1556
1557
1558 ## Ordering
1559
1560 #### DO specify dart: imports, then package: imports, and then relative imports
1561 {:.no_toc}
1562
1563 Separate import sections from each other with a single blank line.
1564
1565 Within each section, prefer sorting alphabetically. If you use a
1566 `package:` import to import from your own package, consider putting
1567 that import in the relative import section.
1568
1569 <div class="good">
1570 {% prettify dart %}
1571 import 'dart:async';
1572 import 'dart:convert' show JSON;
1573 import 'dart:html';
1574
1575 import 'package:bar/bar.dart'
1576 import 'package:bar/foo.dart'
1577 import 'package:foo/bar.dart'
1578
1579 import 'a.dart';
1580 {% endprettify %}
1581 </div>
1582
1583 <div class="bad">
1584 {% prettify dart %}
1585 import 'dart:html';
1586 import 'dart:async';
1587 import 'dart:convert' show JSON;
1588
1589 import 'a.dart';
1590 import 'package:bar/bar.dart'
1591 import 'package:foo/bar.dart'
1592 import 'package:bar/foo.dart'
1593 {% endprettify %}
1594 </div>
1595
1596 #### PREFER specifying exports in a separate section after all imports
1597 {:.no_toc}
1598
1599 Put a single blank line above the exports section.
1600
1601 <div class="good">
1602 {% prettify dart %}
1603 import 'src/error.dart';
1604 import 'src/string_source.dart';
1605
1606 export 'src/error.dart';
1607 {% endprettify %}
1608 </div>
1609
1610 <div class="bad">
1611 {% prettify dart %}
1612 import 'src/error.dart';
1613 export 'src/error.dart';
1614
1615 import 'src/string_source.dart';
1616 {% endprettify %}
1617 </div>
1618
1619
1620 #### PREFER specifying a name for every library
1621 {:.no_toc}
1622
1623 Although Dart allows you to omit `library` from an app file
1624 (a file that has a top-level `main()` function)
1625 we recommend always specifying a library name.
Bob Nystrom 2015/02/26 00:19:52 We do?
Kathy Walrath 2015/02/26 16:15:14 I was surprised, too, but that was in seanegan's s
Bob Nystrom 2015/02/26 20:52:03 My reading comprehension was bad. :( I like the r
1626
1627 <div class="good">
1628 {% prettify dart %}
1629 library my_app;
1630
1631 void main() {
1632 ...
1633 }
1634 {% endprettify %}
1635 </div>
1636
1637 <div class="bad">
1638 {% prettify dart %}
1639 void main() {
1640 ...
1641 }
1642 {% endprettify %}
1643 </div>
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