Toán tử bậc ba c++

Tài liệu này đóng vai trò là định nghĩa đầy đủ về các tiêu chuẩn viết mã của Google cho mã nguồn bằng Ngôn ngữ lập trình Java™. Một tệp nguồn Java được mô tả là ở trong Google Style khi và chỉ khi nó tuân thủ các quy tắc ở đây

Giống như các hướng dẫn về phong cách lập trình khác, các vấn đề được đề cập không chỉ bao gồm các vấn đề thẩm mỹ về định dạng mà còn cả các loại quy ước hoặc tiêu chuẩn viết mã khác. Tuy nhiên, tài liệu này tập trung chủ yếu vào các quy tắc cứng rắn và nhanh chóng mà chúng tôi tuân theo trên toàn cầu và tránh đưa ra lời khuyên không thể thực thi rõ ràng (dù là do con người hay công cụ)

1. 1 Ghi chú thuật ngữ

Trong tài liệu này, trừ khi được giải thích khác

  1. Thuật ngữ lớp được sử dụng một cách toàn diện để chỉ một lớp "thông thường", lớp enum, giao diện hoặc loại chú thích (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    2)
  2. Thuật ngữ thành viên (của một lớp) được sử dụng chung để chỉ một lớp, trường, phương thức hoặc hàm tạo lồng nhau;
  3. Thuật ngữ nhận xét luôn đề cập đến nhận xét triển khai. Chúng tôi không sử dụng cụm từ "bình luận tài liệu" mà thay vào đó sử dụng thuật ngữ phổ biến "Javadoc. "

"Ghi chú thuật ngữ" khác thỉnh thoảng sẽ xuất hiện trong toàn bộ tài liệu

1. 2 Ghi chú hướng dẫn

Mã ví dụ trong tài liệu này là phi quy chuẩn. Nghĩa là, trong khi các ví dụ ở trong Google Style, chúng có thể không minh họa cách duy nhất để thể hiện mã. Các lựa chọn định dạng tùy chọn được thực hiện trong các ví dụ không nên được thực thi như các quy tắc

2 Thông tin cơ bản về tệp nguồn

2. 1 Tên tệp

Tên tệp nguồn bao gồm tên phân biệt chữ hoa chữ thường của lớp cấp cao nhất mà nó chứa (trong đó có chính xác một), cộng với phần mở rộng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
3

2. 2 Mã hóa tập tin. UTF-8

Các tệp nguồn được mã hóa bằng UTF-8

2. 3 ký tự đặc biệt

2. 3. 1 Ký tự khoảng trắng

Ngoài trình tự kết thúc dòng, ký tự khoảng cách ngang ASCII (0x20) là ký tự khoảng trắng duy nhất xuất hiện ở bất kỳ đâu trong tệp nguồn. Điều này ngụ ý rằng

  1. Tất cả các ký tự khoảng trắng khác trong chuỗi và ký tự chữ được thoát
  2. Các ký tự tab không được sử dụng để thụt lề

2. 3. 2 Trình tự thoát hiểm đặc biệt

Đối với bất kỳ ký tự nào có một chuỗi thoát đặc biệt (

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
4,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
5,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
6,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
7,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
8,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
9,
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
0 và
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
1), chuỗi đó được sử dụng thay vì bát phân tương ứng (e. g.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
2) hoặc Unicode (e. g.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
3) trốn thoát

2. 3. 3 ký tự không phải ASCII

Đối với các ký tự không phải ASCII còn lại, ký tự Unicode thực tế (e. g.

MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
4) hoặc lối thoát Unicode tương đương (e. g.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
5) được sử dụng. Sự lựa chọn chỉ phụ thuộc vào việc làm cho mã dễ đọc và dễ hiểu hơn, mặc dù Unicode thoát ra bên ngoài chuỗi ký tự và nhận xét không được khuyến khích

Mẹo. Trong trường hợp thoát Unicode và đôi khi ngay cả khi các ký tự Unicode thực được sử dụng, một nhận xét giải thích có thể rất hữu ích

ví dụ

Ví dụThảo luận
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
6Tốt nhất. hoàn toàn rõ ràng ngay cả khi không có bình luận.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
7Được phép, nhưng không có lý do gì để làm điều này.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
8Được phép, nhưng vụng về và dễ mắc sai lầm.
MyLambda lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate predicate = str ->
    longExpressionInvolving(str);
9Nghèo. người đọc không biết đây là gì.
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
80Tốt. sử dụng các lối thoát cho các ký tự không in được và nhận xét nếu cần

Mẹo. Đừng bao giờ làm cho mã của bạn khó đọc hơn chỉ vì sợ rằng một số chương trình có thể không xử lý đúng các ký tự không phải ASCII. Nếu điều đó xảy ra, những chương trình đó bị hỏng và chúng phải được sửa

3 Cấu trúc tệp nguồn

Một tệp nguồn bao gồm, theo thứ tự

  1. Thông tin giấy phép hoặc bản quyền, nếu có
  2. tuyên bố gói
  3. Báo cáo nhập khẩu
  4. Chính xác một lớp cấp cao nhất

Chính xác một dòng trống ngăn cách mỗi phần có mặt

3. 1 Giấy phép hoặc thông tin bản quyền, nếu có

Nếu thông tin giấy phép hoặc bản quyền thuộc về một tệp, thì nó thuộc về đây

3. 2 Tuyên bố gói

Câu lệnh gói không được ngắt dòng. Giới hạn cột (Mục 4. 4, Giới hạn cột. 100) không áp dụng cho câu lệnh gói

3. 3 Báo cáo nhập khẩu

3. 3. 1 Không nhập ký tự đại diện

Nhập ký tự đại diện, tĩnh hoặc cách khác, không được sử dụng

3. 3. 2 Không ngắt dòng

Câu lệnh nhập không được ngắt dòng. Giới hạn cột (Mục 4. 4, Giới hạn cột. 100) không áp dụng cho câu lệnh nhập

3. 3. 3 Thứ tự và khoảng cách

Nhập khẩu được đặt hàng như sau

  1. Tất cả nhập tĩnh trong một khối
  2. Tất cả nhập không tĩnh trong một khối

Nếu có cả nhập tĩnh và không tĩnh, một dòng trống sẽ phân tách hai khối. Không có dòng trống nào khác giữa các câu lệnh nhập

Trong mỗi khối, các tên đã nhập xuất hiện theo thứ tự sắp xếp ASCII. (Ghi chú. điều này không giống với các câu lệnh nhập theo thứ tự sắp xếp ASCII, vì '. ' sắp xếp trước ';'. )

3. 3. 4 Không nhập tĩnh cho các lớp

Nhập tĩnh không được sử dụng cho các lớp lồng nhau tĩnh. Chúng được nhập khẩu với hàng nhập khẩu bình thường

3. 4 Khai báo lớp

3. 4. 1 Chính xác một khai báo lớp cấp cao nhất

Mỗi lớp cấp cao nhất nằm trong một tệp nguồn của riêng nó

3. 4. 2 Thứ tự nội dung lớp học

Thứ tự bạn chọn cho các thành viên và người khởi tạo lớp học của bạn có thể có ảnh hưởng lớn đến khả năng học hỏi. Tuy nhiên, không có công thức chính xác duy nhất về cách thực hiện;

Điều quan trọng là mỗi lớp sử dụng một số trật tự logic mà người bảo trì của nó có thể giải thích nếu được hỏi. Ví dụ: các phương thức mới không chỉ được thêm vào cuối lớp theo thói quen, vì điều đó sẽ tạo ra thứ tự "thứ tự thời gian theo ngày được thêm vào", đây không phải là thứ tự logic

3. 4. 2. 1 quá tải. không bao giờ chia

Các phương thức của một lớp có cùng tên xuất hiện trong một nhóm liền kề duy nhất không có thành viên nào khác ở giữa. Điều tương tự cũng áp dụng cho nhiều hàm tạo (luôn có cùng tên). Quy tắc này áp dụng ngay cả khi các công cụ sửa đổi như

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
81 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
82 khác nhau giữa các phương thức

4 Định dạng

Lưu ý thuật ngữ. cấu trúc giống như khối đề cập đến phần thân của một lớp, phương thức hoặc hàm tạo. Lưu ý rằng, theo Mục 4. 8. 3. 1 trên các trình khởi tạo mảng, bất kỳ trình khởi tạo mảng nào cũng có thể tùy chọn được xử lý như thể nó là một cấu trúc giống như khối

4. 1 niềng răng

4. 1. 1 Sử dụng niềng răng tùy chọn

Dấu ngoặc nhọn được sử dụng với các câu lệnh

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
83,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
84,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
85,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
86 và
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
87, ngay cả khi phần thân trống hoặc chỉ chứa một câu lệnh duy nhất

Các dấu ngoặc nhọn tùy chọn khác, chẳng hạn như các dấu ngoặc nhọn trong biểu thức lambda, vẫn là tùy chọn

4. 1. 2 khối rỗng. phong cách K & R

Niềng răng theo kiểu Kernighan và Ritchie ("dấu ngoặc Ai Cập") cho các khối không trống và các cấu trúc giống như khối

  • Không ngắt dòng trước dấu ngoặc mở, ngoại trừ như chi tiết bên dưới
  • Ngắt dòng sau cú đúp mở đầu
  • Ngắt dòng trước dấu ngoặc nhọn
  • Ngắt dòng sau dấu ngoặc nhọn, chỉ khi dấu ngoặc nhọn đó kết thúc câu lệnh hoặc kết thúc phần thân của phương thức, hàm tạo hoặc lớp được đặt tên. Ví dụ: không có ngắt dòng sau dấu ngoặc nếu theo sau nó là
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    84 hoặc dấu phẩy

Ngoại lệ. Ở những nơi mà các quy tắc này cho phép một câu lệnh kết thúc bằng dấu chấm phẩy (

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
89), một khối câu lệnh có thể xuất hiện và dấu ngoặc mở của khối này được đặt trước dấu ngắt dòng. Các khối như thế này thường được giới thiệu để giới hạn phạm vi của các biến cục bộ, ví dụ như bên trong các câu lệnh chuyển đổi

ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
8

Một vài ngoại lệ cho các lớp enum được đưa ra trong Phần 4. 8. 1, Các lớp liệt kê

4. 1. 3 khối trống. có thể ngắn gọn

Một khối trống hoặc cấu trúc giống như khối có thể theo kiểu K & R (như được mô tả trong Phần 4. 1. 2). Ngoài ra, nó có thể được đóng lại ngay sau khi được mở, không có ký tự hoặc ngắt dòng ở giữa (

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
90), trừ khi nó là một phần của câu lệnh nhiều khối (câu lệnh chứa trực tiếp nhiều khối.
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
91 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
92)

ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
2____0

4. 2 Khối thụt đầu dòng. +2 dấu cách

Mỗi khi một khối mới hoặc cấu trúc giống như khối được mở, phần thụt lề sẽ tăng thêm hai khoảng trắng. Khi khối kết thúc, thụt lề trở về mức thụt lề trước đó. Mức thụt lề áp dụng cho cả mã và nhận xét trong toàn bộ khối. (Xem ví dụ ở Mục 4. 1. 2, Khối rỗng. Phong cách K & R. )

4. 3 Một câu lệnh trên mỗi dòng

Mỗi câu lệnh được theo sau bởi một dấu ngắt dòng

4. 4 Giới hạn cột. 100

Mã Java có giới hạn cột là 100 ký tự. Một "ký tự" có nghĩa là bất kỳ điểm mã Unicode nào. Ngoại trừ như được lưu ý bên dưới, bất kỳ dòng nào vượt quá giới hạn này đều phải được ngắt dòng, như được giải thích trong Phần 4. 5, Line-wrapping

Mỗi điểm mã Unicode được tính là một ký tự, ngay cả khi độ rộng hiển thị của nó lớn hơn hoặc nhỏ hơn. Ví dụ: nếu sử dụng các ký tự có độ rộng đầy đủ, bạn có thể chọn ngắt dòng sớm hơn khi quy tắc này yêu cầu nghiêm ngặt

ngoại lệ

  1. Các dòng không thể tuân theo giới hạn cột (ví dụ: URL dài trong Javadoc hoặc tham chiếu phương thức JSNI dài)
  2. Câu lệnh
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    93 và
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    94 (xem Phần 3. 2 Tuyên bố gói và 3. 3 Báo cáo nhập khẩu)
  3. Các dòng lệnh trong nhận xét có thể được sao chép và dán vào trình bao
  4. Số nhận dạng rất dài, trong những trường hợp hiếm hoi mà chúng được yêu cầu, được phép vượt quá giới hạn cột. Trong trường hợp đó, gói hợp lệ cho mã xung quanh được tạo bởi google-java-format

4. 5 Đóng gói dòng

Lưu ý thuật ngữ. Khi mã có thể chiếm một dòng một cách hợp pháp được chia thành nhiều dòng, hoạt động này được gọi là ngắt dòng

Không có công thức toàn diện, xác định nào chỉ ra chính xác cách ngắt dòng trong mọi tình huống. Rất thường có một số cách hợp lệ để ngắt dòng cùng một đoạn mã

Ghi chú. Mặc dù lý do điển hình của việc ngắt dòng là để tránh vượt quá giới hạn cột, nhưng ngay cả mã thực tế phù hợp với giới hạn cột cũng có thể được ngắt dòng theo quyết định của tác giả

Mẹo. Trích xuất một phương thức hoặc biến cục bộ có thể giải quyết vấn đề mà không cần phải ngắt dòng

4. 5. 1 Nơi để phá vỡ

Chỉ thị chính của line-wrapping là. thích phá vỡ ở cấp độ cú pháp cao hơn. Cũng thế

  1. Khi một dòng bị ngắt ở một toán tử không gán thì dấu ngắt xuất hiện trước ký hiệu. (Lưu ý rằng đây không phải là phương pháp tương tự được sử dụng theo kiểu Google cho các ngôn ngữ khác, chẳng hạn như C++ và JavaScript. )
    • Điều này cũng áp dụng cho các ký hiệu "giống toán tử" sau đây
      • dấu phân cách dấu chấm (
          // This is not acceptable: No concise empty blocks in a multi-block statement
          try {
            doSomething();
          } catch (Exception e) {}
        
        95)
      • hai dấu hai chấm của tham chiếu phương thức (
          // This is not acceptable: No concise empty blocks in a multi-block statement
          try {
            doSomething();
          } catch (Exception e) {}
        
        96)
      • một ký hiệu và trong một giới hạn loại (
          // This is not acceptable: No concise empty blocks in a multi-block statement
          try {
            doSomething();
          } catch (Exception e) {}
        
        97)
      • một đường ống trong một khối bắt (
          // This is not acceptable: No concise empty blocks in a multi-block statement
          try {
            doSomething();
          } catch (Exception e) {}
        
        98)
  2. Khi một dòng bị ngắt tại một toán tử gán, dấu ngắt thường xuất hiện sau ký hiệu, nhưng cả hai cách đều được chấp nhận
    • Điều này cũng áp dụng cho dấu hai chấm "giống toán tử gán" trong câu lệnh
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      85 ("foreach") nâng cao
  3. Tên phương thức hoặc hàm tạo được gắn vào dấu ngoặc đơn mở (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    10) theo sau nó
  4. Dấu phẩy (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    11) vẫn được gắn vào mã thông báo đứng trước nó
  5. Một dòng không bao giờ bị ngắt liền kề với mũi tên trong lambda, ngoại trừ một dấu ngắt có thể xuất hiện ngay sau mũi tên nếu phần thân của lambda bao gồm một biểu thức không có dấu ngoặc đơn. ví dụ. ________số 8

Ghi chú. Mục tiêu chính của việc ngắt dòng là có mã rõ ràng, không nhất thiết là mã phù hợp với số lượng dòng nhỏ nhất

4. 5. 2 dòng tiếp tục thụt lề ít nhất +4 dấu cách

Khi ngắt dòng, mỗi dòng sau dòng đầu tiên (mỗi dòng tiếp theo) được thụt vào ít nhất +4 so với dòng gốc

Khi có nhiều dòng tiếp tục, thụt đầu dòng có thể thay đổi ngoài +4 như mong muốn. Nói chung, hai dòng tiếp tục sử dụng cùng một mức thụt đầu dòng khi và chỉ khi chúng bắt đầu bằng các yếu tố song song về mặt cú pháp

phần 4. 6. 3 về Căn chỉnh theo chiều ngang giải quyết thực tiễn không khuyến khích sử dụng một số lượng khoảng trắng khác nhau để căn chỉnh các mã thông báo nhất định với các dòng trước đó

4. 6 Khoảng trắng

4. 6. 1 Khoảng trắng dọc

Một dòng trống duy nhất luôn xuất hiện

  1. Giữa các thành viên liên tiếp hoặc khởi tạo của một lớp. trường, hàm tạo, phương thức, lớp lồng nhau, trình khởi tạo tĩnh và trình khởi tạo thể hiện
    • Ngoại lệ. Một dòng trống giữa hai trường liên tiếp (không có mã nào khác giữa chúng) là tùy chọn. Các dòng trống như vậy được sử dụng khi cần thiết để tạo các nhóm trường hợp lý
    • Ngoại lệ. Các dòng trống giữa các hằng số enum được đề cập trong Phần 4. 8. 1
  2. Theo yêu cầu của các phần khác của tài liệu này (chẳng hạn như Phần 3, Cấu trúc tệp nguồn và Phần 3. 3, Báo cáo nhập khẩu)

Một dòng trống duy nhất cũng có thể xuất hiện ở bất cứ đâu giúp cải thiện khả năng đọc, ví dụ như giữa các câu lệnh để tổ chức mã thành các tiểu mục hợp lý. Một dòng trống trước thành viên hoặc bộ khởi tạo đầu tiên, hoặc sau thành viên hoặc bộ khởi tạo cuối cùng của lớp, không được khuyến khích cũng như không khuyến khích

Nhiều dòng trống liên tiếp được cho phép, nhưng không bao giờ bắt buộc (hoặc khuyến khích)

4. 6. 2 Khoảng trắng ngang

Ngoài những nơi được yêu cầu bởi ngôn ngữ hoặc các quy tắc kiểu khác và ngoài chữ, nhận xét và Javadoc, một không gian ASCII duy nhất cũng chỉ xuất hiện ở những nơi sau

  1. Tách bất kỳ từ dành riêng nào, chẳng hạn như
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    83,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    85 hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    14, khỏi dấu ngoặc đơn mở (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    10) theo sau từ đó trên dòng đó
  2. Tách bất kỳ từ dành riêng nào, chẳng hạn như
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    84 hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    14, khỏi dấu ngoặc nhọn đóng (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    18) đứng trước từ đó trên dòng đó
  3. Trước bất kỳ dấu ngoặc nhọn mở nào (______419), với hai ngoại lệ
    •   // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      20 (không sử dụng khoảng trống)
    •   // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      21 (không cần khoảng trống giữa
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      22, theo mục 9 bên dưới)
  4. Trên cả hai mặt của bất kỳ toán tử nhị phân hoặc bậc ba nào. Điều này cũng áp dụng cho các ký hiệu "giống toán tử" sau đây
    • ký hiệu và trong một loại liên kết bị ràng buộc.
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      97
    • đường ống cho một khối bắt xử lý nhiều ngoại lệ.
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      98
    • dấu hai chấm (
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      25) trong câu lệnh
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      85 ("foreach") nâng cao
    • mũi tên trong biểu thức lambda.
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      27
    nhưng không
    • hai dấu hai chấm (
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      96) của tham chiếu phương thức, được viết như
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      29
    • dấu phân cách dấu chấm (
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      95), được viết như
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      31
  5. Sau
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    32 hoặc dấu ngoặc đơn đóng (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    33) của một diễn viên
  6. Giữa bất kỳ nội dung nào và dấu gạch chéo kép (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    34) bắt đầu nhận xét. Nhiều không gian được cho phép
  7. Giữa dấu gạch chéo kép (
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    34) bắt đầu nhận xét và văn bản của nhận xét. Nhiều không gian được cho phép
  8. Giữa kiểu và biến của một khai báo.
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    36
  9. Tùy chọn ngay bên trong cả hai dấu ngoặc nhọn của bộ khởi tạo mảng
    •   // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      37 và
        // This is not acceptable: No concise empty blocks in a multi-block statement
        try {
          doSomething();
        } catch (Exception e) {}
      
      38 đều hợp lệ
  10. Giữa một chú thích loại và
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    39 hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    20

Quy tắc này không bao giờ được hiểu là yêu cầu hoặc cấm thêm khoảng trắng ở đầu hoặc cuối dòng;

4. 6. 3 Căn ngang. không bao giờ bắt buộc

Lưu ý thuật ngữ. Căn chỉnh theo chiều ngang là cách thêm một số khoảng trắng bổ sung có thể thay đổi vào mã của bạn với mục tiêu làm cho một số mã thông báo nhất định xuất hiện ngay bên dưới một số mã thông báo khác trên các dòng trước đó

Phương pháp này được cho phép nhưng Google Style không bao giờ yêu cầu. Thậm chí không bắt buộc phải duy trì căn chỉnh ngang ở những nơi nó đã được sử dụng

Đây là một ví dụ không có căn chỉnh, sau đó sử dụng căn chỉnh

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
8

Mẹo. Căn chỉnh có thể hỗ trợ khả năng đọc, nhưng nó tạo ra các vấn đề cho việc bảo trì trong tương lai. Xem xét một thay đổi trong tương lai chỉ cần chạm vào một dòng. Thay đổi này có thể khiến định dạng hài lòng trước đây bị xáo trộn và điều đó được cho phép. Thông thường, nó cũng nhắc người viết mã (có thể là bạn) điều chỉnh khoảng trắng trên các dòng gần đó, có thể kích hoạt một loạt định dạng lại xếp tầng. Thay đổi một dòng đó hiện có "bán kính vụ nổ. " Điều này tệ nhất có thể dẫn đến công việc bận rộn vô ích, nhưng tốt nhất thì nó vẫn làm hỏng thông tin lịch sử phiên bản, làm chậm trình đánh giá và làm trầm trọng thêm xung đột hợp nhất

4. 7 Nhóm dấu ngoặc đơn. khuyến khích

Các dấu ngoặc nhóm tùy chọn chỉ được bỏ qua khi tác giả và người đánh giá đồng ý rằng không có khả năng mã sẽ bị hiểu sai nếu không có chúng, cũng như chúng sẽ không làm cho mã dễ đọc hơn. Sẽ không hợp lý nếu cho rằng mọi trình đọc đều ghi nhớ toàn bộ bảng ưu tiên của toán tử Java

4. 8 Cấu trúc cụ thể

4. 8. 1 lớp Enum

Sau mỗi dấu phẩy theo sau hằng số enum, ngắt dòng là tùy chọn. Các dòng trống bổ sung (thường chỉ một dòng) cũng được phép. Đây là một khả năng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
9

Một lớp enum không có phương thức và không có tài liệu về hằng số của nó có thể được định dạng tùy chọn như thể nó là một trình khởi tạo mảng (xem Phần 4. 8. 3. 1 trên bộ khởi tạo mảng)

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
1

Vì các lớp enum là các lớp, nên áp dụng tất cả các quy tắc khác để định dạng lớp

4. 8. 2 Khai báo biến

4. 8. 2. 1 Một biến trên mỗi khai báo

Mỗi khai báo biến (trường hoặc cục bộ) chỉ khai báo một biến. khai báo như

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
21 không được sử dụng

Ngoại lệ. Nhiều khai báo biến được chấp nhận trong tiêu đề của vòng lặp

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
85

4. 8. 2. 2 Khai báo khi cần thiết

Các biến cục bộ không được khai báo theo thói quen khi bắt đầu khối chứa hoặc cấu trúc giống như khối của chúng. Thay vào đó, các biến cục bộ được khai báo gần với điểm chúng được sử dụng lần đầu tiên (với lý do), để giảm thiểu phạm vi của chúng. Khai báo biến cục bộ thường có bộ khởi tạo hoặc được khởi tạo ngay sau khi khai báo

4. 8. 3 mảng

4. 8. 3. 1 Trình khởi tạo mảng. có thể là "giống như khối"

Bất kỳ trình khởi tạo mảng nào cũng có thể được định dạng tùy chọn như thể nó là một "cấu trúc giống như khối. " Ví dụ: tất cả những điều sau đây đều hợp lệ (không phải là danh sách đầy đủ)

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
2
4. 8. 3. 2 Không khai báo mảng kiểu C

Dấu ngoặc vuông tạo thành một phần của loại, không phải biến.

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
23, không phải
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
24

4. 8. 4 Câu lệnh chuyển đổi

Lưu ý thuật ngữ. Bên trong dấu ngoặc nhọn của khối chuyển đổi là một hoặc nhiều nhóm câu lệnh. Mỗi nhóm câu lệnh bao gồm một hoặc nhiều nhãn chuyển đổi (hoặc là

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
25 hoặc là
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
26), tiếp theo là một hoặc nhiều câu lệnh (hoặc, đối với nhóm câu lệnh cuối cùng, không có hoặc nhiều câu lệnh)

4. 8. 4. 1 thụt đầu dòng

Như với bất kỳ khối nào khác, nội dung của khối chuyển đổi được thụt vào +2

Sau nhãn chuyển đổi, có một ngắt dòng và mức thụt đầu dòng được tăng lên +2, chính xác như thể một khối đang được mở. Nhãn công tắc sau trở về mức thụt đầu dòng trước đó, như thể một khối đã bị đóng

4. 8. 4. 2 Fall-thông qua. nhận xét

Trong một khối chuyển đổi, mỗi nhóm câu lệnh hoặc kết thúc đột ngột (với một ngoại lệ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
27,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
28,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
29 hoặc bị ném), hoặc được đánh dấu bằng một nhận xét để chỉ ra rằng việc thực thi sẽ hoặc có thể tiếp tục trong nhóm câu lệnh tiếp theo. Bất kỳ nhận xét nào truyền đạt ý tưởng về sự thất bại là đủ (thường là
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
200). Chú thích đặc biệt này không bắt buộc trong nhóm câu lệnh cuối cùng của khối chuyển đổi. Ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
3

Lưu ý rằng không cần chú thích sau

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
201, chỉ ở cuối nhóm câu lệnh

4. 8. 4. 3 Sự hiện diện của nhãn
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
202

Mỗi câu lệnh chuyển đổi bao gồm một nhóm câu lệnh

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
202, ngay cả khi nó không chứa mã

Ngoại lệ. Câu lệnh chuyển đổi cho loại

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
204 có thể bỏ qua nhóm câu lệnh
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
202, nếu nó bao gồm các trường hợp rõ ràng bao gồm tất cả các giá trị có thể có của loại đó. Điều này cho phép IDE hoặc các công cụ phân tích tĩnh khác đưa ra cảnh báo nếu có bất kỳ trường hợp nào bị bỏ sót

4. 8. 5 chú thích

4. 8. 5. 1 Chú thích loại sử dụng

Chú thích sử dụng loại xuất hiện ngay trước loại chú thích. Một chú thích là một chú thích sử dụng kiểu nếu nó được siêu chú thích với

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
206. Ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
2
4. 8. 5. 2 Chú thích lớp

Các chú thích áp dụng cho một lớp xuất hiện ngay sau khối tài liệu và mỗi chú thích được liệt kê trên một dòng của chính nó (nghĩa là một chú thích trên mỗi dòng). Các ngắt dòng này không cấu thành ngắt dòng (Phần 4. 5, Line-wrapping), vì vậy mức thụt đầu dòng không tăng. Ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
20
4. 8. 5. 3 Chú thích phương thức và hàm tạo

Các quy định về chú thích trong khai báo phương thức và hàm tạo giống như phần trước. Ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
21

Ngoại lệ. Thay vào đó, một chú thích không tham số có thể xuất hiện cùng với dòng đầu tiên của chữ ký, ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
22
4. 8. 5. 4 Chú thích trường

Các chú thích áp dụng cho một trường cũng xuất hiện ngay sau khối tài liệu, nhưng trong trường hợp này, nhiều chú thích (có thể được tham số hóa) có thể được liệt kê trên cùng một dòng;

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
23
4. 8. 5. 5 Chú thích tham số và biến cục bộ

Không có quy tắc cụ thể nào để định dạng chú thích trên tham số hoặc biến cục bộ (tất nhiên, ngoại trừ khi chú thích là chú thích sử dụng kiểu)

Phần này giải quyết các ý kiến ​​​​thực hiện. Javadoc được giải quyết riêng trong Phần 7, Javadoc

Bất kỳ ngắt dòng nào cũng có thể được bắt đầu bằng khoảng trắng tùy ý, sau đó là nhận xét triển khai. Nhận xét như vậy làm cho dòng không trống

Nhận xét khối được thụt lề ở cùng mức với mã xung quanh. Chúng có thể ở kiểu

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
207 hoặc kiểu
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
208. Đối với nhận xét nhiều dòng
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
207, các dòng tiếp theo phải bắt đầu bằng
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
210 thẳng hàng với
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
210 trên dòng trước đó

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
24

Nhận xét không được đặt trong các hộp được vẽ bằng dấu hoa thị hoặc các ký tự khác

Mẹo. Khi viết nhận xét nhiều dòng, hãy sử dụng kiểu

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
207 nếu bạn muốn trình định dạng mã tự động ngắt dòng khi cần thiết (kiểu đoạn văn). Hầu hết các trình định dạng không ngắt dòng lại trong khối nhận xét kiểu
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
208

4. 8. 7 công cụ sửa đổi

Các công cụ sửa đổi lớp và thành viên, khi có mặt, xuất hiện theo thứ tự được khuyến nghị bởi Đặc tả ngôn ngữ Java

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
25

4. 8. 8 chữ số

Các số nguyên có giá trị

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
214 sử dụng hậu tố
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
215 viết hoa, không bao giờ viết thường (để tránh nhầm lẫn với chữ số
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
216). Ví dụ:
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
217 thay vì
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
218

5 đặt tên

5. 1 Quy tắc chung cho tất cả các định danh

Định danh chỉ sử dụng các chữ cái và chữ số ASCII, và trong một số ít trường hợp được lưu ý bên dưới, dấu gạch dưới. Do đó, mỗi tên định danh hợp lệ được khớp với biểu thức chính quy

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
219

Trong Google Style, các tiền tố hoặc hậu tố đặc biệt không được sử dụng. Ví dụ: những tên này không phải là Google Style.

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
220,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
221,
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
222 và
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
223

5. 2 Quy tắc theo loại định danh

5. 2. 1 tên gói

Tên gói chỉ sử dụng chữ thường và chữ số (không có dấu gạch dưới). Các từ liên tiếp được nối đơn giản với nhau. Ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
224, không phải
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
225 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
226

5. 2. 2 Tên lớp

Tên lớp được viết bằng UpperCamelCase

Tên lớp thường là danh từ hoặc cụm danh từ. Ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
227 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
228. Tên giao diện cũng có thể là danh từ hoặc cụm danh từ (ví dụ:
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
229), nhưng đôi khi có thể là tính từ hoặc cụm tính từ (ví dụ:
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
230)

Không có quy tắc cụ thể hoặc thậm chí các quy ước được thiết lập tốt để đặt tên cho các loại chú thích

Một lớp kiểm tra có tên kết thúc bằng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
231, ví dụ:
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
232. Nếu nó bao gồm một lớp duy nhất, tên của nó là tên của lớp đó cộng với
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
231, ví dụ như
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
234

5. 2. 3 Tên phương thức

Tên phương thức được viết bằng LowerCamelCase

Tên phương thức thường là động từ hoặc cụm động từ. Ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
235 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
236

Dấu gạch dưới có thể xuất hiện trong tên phương thức thử nghiệm JUnit để phân tách các thành phần logic của tên, với mỗi thành phần được viết bằng chữ thường CamelCase, ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
237. Không có một cách chính xác nào để đặt tên cho các phương pháp thử nghiệm

5. 2. 4 Tên hằng

Tên hằng sử dụng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
238. tất cả các chữ cái viết hoa, với mỗi từ được phân tách với từ tiếp theo bằng một dấu gạch dưới. Nhưng chính xác thì hằng số là gì?

Các hằng số là các trường cuối cùng tĩnh có nội dung không thay đổi sâu sắc và các phương thức của chúng không có tác dụng phụ có thể phát hiện được. Các ví dụ bao gồm nguyên hàm, chuỗi, lớp giá trị bất biến và bất kỳ thứ gì được đặt thành

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
239. Nếu bất kỳ trạng thái quan sát được nào của đối tượng có thể thay đổi, thì đó không phải là hằng số. Chỉ có ý định không bao giờ thay đổi đối tượng là không đủ. ví dụ

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
26

Những tên này thường là danh từ hoặc cụm danh từ

5. 2. 5 Tên trường không cố định

Tên trường không cố định (tĩnh hoặc cách khác) được viết bằng chữ thường

Những tên này thường là danh từ hoặc cụm danh từ. Ví dụ:

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
240 hoặc
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
241

5. 2. 6 tên tham số

Tên tham số được viết bằng LowerCamelCase

Nên tránh các tên tham số một ký tự trong các phương thức công khai

5. 2. 7 Tên biến cục bộ

Tên biến cục bộ được viết bằng LowerCamelCase

Ngay cả khi là biến cuối cùng và không thay đổi, các biến cục bộ không được coi là hằng số và không nên được định kiểu là hằng số

5. 2. 8 Nhập tên biến

Mỗi biến kiểu được đặt tên theo một trong hai kiểu

  • Một chữ cái viết hoa, tùy ý theo sau bởi một chữ số (chẳng hạn như
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    242,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    243,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    244,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    245)
  • Một tên ở dạng được sử dụng cho các lớp (xem Phần 5. 2. 2, Tên lớp), theo sau là chữ in hoa
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    243 (ví dụ.
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    247,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    248)

5. 3 Vỏ lạc đà. xác định

Đôi khi, có nhiều cách hợp lý để chuyển đổi một cụm từ tiếng Anh thành trường hợp lạc đà, chẳng hạn như khi có từ viết tắt hoặc cấu trúc bất thường như "IPv6" hoặc "iOS". Để cải thiện khả năng dự đoán, Google Style chỉ định lược đồ xác định (gần như) sau đây

Bắt đầu với hình thức văn xuôi của tên

  1. Chuyển đổi cụm từ thành ASCII đơn giản và xóa mọi dấu nháy đơn. Ví dụ: "Thuật toán Müller" có thể trở thành "Thuật toán Muller"
  2. Chia kết quả này thành các từ, phân tách trên khoảng trắng và bất kỳ dấu câu nào còn lại (thường là dấu gạch nối)
    • Khuyến khích. nếu bất kỳ từ nào đã có dạng chữ lạc đà thông thường được sử dụng phổ biến, hãy chia từ này thành các phần cấu thành của nó (e. g. , "AdWords" trở thành "ad words"). Lưu ý rằng một từ chẳng hạn như "iOS" không thực sự ở dạng lạc đà;
  3. Bây giờ viết thường mọi thứ (bao gồm cả từ viết tắt), sau đó chỉ viết hoa ký tự đầu tiên của
    • mỗi từ, để mang lại trường hợp lạc đà trên, hoặc
    • mỗi từ trừ từ đầu tiên, để mang lại trường hợp lạc đà thấp hơn
  4. Cuối cùng, nối tất cả các từ thành một định danh duy nhất

Lưu ý rằng cách viết hoa của các từ gốc gần như hoàn toàn bị bỏ qua. ví dụ

Biểu mẫu văn xuôiĐúngSai"Yêu cầu HTTP XML"
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
249
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
250"ID khách hàng mới"
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
251
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
252"đồng hồ bấm giờ bên trong"
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
253
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
254"hỗ trợ IPv6 trên iOS?"
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
255
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
256"Nhà nhập khẩu YouTube"
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
257
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
258*

*Chấp nhận được, nhưng không khuyến khích

Ghi chú. Một số từ được gạch nối một cách mơ hồ trong ngôn ngữ tiếng Anh. ví dụ: "nonempty" và "non-empty" đều đúng, vì vậy tên phương thức

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
259 và
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
260 cũng đúng

6 Thực hành lập trình

6. 1 // This is not acceptable: No concise empty blocks in a multi-block statement try { doSomething(); } catch (Exception e) {} 261. luôn được sử dụng

Một phương thức được đánh dấu bằng chú thích

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
261 bất cứ khi nào nó hợp pháp. Điều này bao gồm một phương thức lớp ghi đè một phương thức siêu lớp, một phương thức lớp triển khai một phương thức giao diện và một phương thức giao diện xác định lại một phương thức siêu giao diện

Ngoại lệ.

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
261 có thể được bỏ qua khi phương thức gốc là
  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
264

6. 2 ngoại lệ bị bắt. không bỏ qua

Ngoại trừ như được lưu ý bên dưới, rất hiếm khi đúng khi không làm gì để đáp lại một ngoại lệ bị bắt. (Các phản hồi điển hình là ghi nhật ký hoặc nếu nó được coi là "không thể", hãy viết lại dưới dạng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
265. )

Khi thực sự thích hợp để không thực hiện bất kỳ hành động nào trong một khối bắt, lý do điều này là hợp lý được giải thích trong một nhận xét

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
27

Ngoại lệ. Trong các thử nghiệm, một ngoại lệ bị bắt có thể bị bỏ qua mà không cần bình luận nếu tên của nó là hoặc bắt đầu bằng

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
266. Sau đây là một thành ngữ rất phổ biến để đảm bảo rằng mã được kiểm tra sẽ đưa ra một ngoại lệ của loại dự kiến, vì vậy một bình luận là không cần thiết ở đây

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
28

6. 3 thành viên tĩnh. đủ điều kiện sử dụng lớp

Khi một tham chiếu đến một thành viên lớp tĩnh phải đủ điều kiện, nó sẽ đủ điều kiện với tên của lớp đó, không phải với một tham chiếu hoặc biểu thức của loại lớp đó

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
29

6. 4 người hoàn thiện. không được sử dụng

Rất hiếm khi ghi đè lên

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
267

Mẹo. Đừng làm điều đó. Nếu bạn thực sự phải làm vậy, trước tiên hãy đọc và hiểu Mục 8 Hiệu quả của Java, "Tránh bộ hoàn thiện và trình dọn dẹp" thật cẩn thận, sau đó đừng làm điều đó

7 Javadoc

7. 1 định dạng

7. 1. 1 Hình thức chung

Định dạng cơ bản của các khối Javadoc như trong ví dụ này

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
0

hoặc trong ví dụ một dòng này

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
1

Hình thức cơ bản luôn được chấp nhận. Biểu mẫu một dòng có thể được thay thế khi toàn bộ khối Javadoc (bao gồm cả các dấu nhận xét) có thể vừa trên một dòng. Lưu ý rằng điều này chỉ áp dụng khi không có thẻ chặn, chẳng hạn như

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
268

7. 1. 2 Đoạn

Một dòng trống—tức là, một dòng chỉ chứa dấu hoa thị đứng đầu được căn chỉnh (

  // This is not acceptable: No concise empty blocks in a multi-block statement
  try {
    doSomething();
  } catch (Exception e) {}
210)—xuất hiện giữa các đoạn văn và trước nhóm thẻ khối nếu có. Mỗi đoạn ngoại trừ đoạn đầu tiên có

ngay trước từ đầu tiên, không có khoảng trống sau từ đó. Các thẻ HTML cho các thành phần cấp độ khối khác, chẳng hạn như

    hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    270,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    268,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    272,
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    273 và 4 loại này không bao giờ xuất hiện với phần mô tả trống. Khi thẻ khối không vừa trên một dòng, các dòng tiếp theo sẽ được thụt vào bốn (hoặc nhiều hơn) khoảng cách từ vị trí của
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    274

    7. 2 Đoạn tóm tắt

    Mỗi khối Javadoc bắt đầu bằng một đoạn tóm tắt ngắn gọn. Đoạn này rất quan trọng. nó là phần duy nhất của văn bản xuất hiện trong các ngữ cảnh nhất định, chẳng hạn như chỉ mục lớp và phương thức

    Đây là một đoạn—cụm danh từ hoặc cụm động từ, không phải là một câu hoàn chỉnh. Nó không bắt đầu bằng

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    275, hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    276, cũng không tạo thành một câu mệnh lệnh hoàn chỉnh như
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    277. Tuy nhiên, đoạn này được viết hoa và chấm câu như thể nó là một câu hoàn chỉnh

    Mẹo. Một lỗi phổ biến là viết Javadoc đơn giản ở dạng

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    278. Điều này là không chính xác và nên được thay đổi thành
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    279

    7. 3 Javadoc được sử dụng ở đâu

    Ở mức tối thiểu, Javadoc có mặt cho mọi lớp

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    280 và mọi thành viên
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    280 hoặc
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    282 của một lớp như vậy, với một vài ngoại lệ được lưu ý bên dưới

    Nội dung Javadoc bổ sung cũng có thể xuất hiện, như được giải thích trong Phần 7. 3. 4, Javadoc không bắt buộc

    7. 3. 1 ngoại lệ. thành viên tự giải thích

    Javadoc là tùy chọn cho các thành viên "đơn giản, rõ ràng" như

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    283, trong trường hợp thực sự và thực sự không có gì khác đáng để nói ngoài "Trả về foo"

    Quan trọng. không thích hợp để trích dẫn ngoại lệ này để biện minh cho việc bỏ qua thông tin liên quan mà một người đọc thông thường có thể cần biết. Ví dụ: đối với một phương thức có tên là

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    284, đừng bỏ qua tài liệu của nó (với lý do là nó chỉ ghi là
      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    285) nếu một người đọc thông thường có thể không biết thuật ngữ "tên kinh điển" nghĩa là gì

    7. 3. 2 ngoại lệ. ghi đè

    Javadoc không phải lúc nào cũng có mặt trên một phương thức ghi đè một phương thức siêu kiểu

    7. 3. 4 Javadoc không bắt buộc

    Các lớp và thành viên khác có Javadoc khi cần hoặc mong muốn

    Bất cứ khi nào một nhận xét triển khai sẽ được sử dụng để xác định mục đích hoặc hành vi tổng thể của một lớp hoặc thành viên, thay vào đó, nhận xét đó được viết dưới dạng Javadoc (sử dụng

      // This is not acceptable: No concise empty blocks in a multi-block statement
      try {
        doSomething();
      } catch (Exception e) {}
    
    286)

    Javadoc không bắt buộc không bắt buộc phải tuân theo các quy tắc định dạng của Phần 7. 1. 1, 7. 1. 2, 7. 1. 3 và 7. 2, mặc dù nó tất nhiên được khuyến khích