Hướng dẫn python safe navigation operator - nhà điều hành điều hướng an toàn python

Vì vậy, tôi đã sử dụng Ruby một thời gian và tôi tự hỏi liệu có một cái gì đó giống như Navigator an toàn

var name = articles?[0]?.Author?.Name;
7 trong Python.

Dưới đây là một ví dụ về thời điểm sử dụng toán tử an toàn.

Anthony

  • Python

Hướng dẫn python safe navigation operator - nhà điều hành điều hướng an toàn python

một người khác

7.1883 Huy hiệu vàng30 Huy hiệu bạc46 Huy hiệu Đồng3 gold badges30 silver badges46 bronze badges

Đã hỏi ngày 15 tháng 3 năm 2019 lúc 15:09Mar 15, 2019 at 15:09

Hướng dẫn python safe navigation operator - nhà điều hành điều hướng an toàn python

AnthonyanthonyAnthony

8921 Huy hiệu vàng13 Huy hiệu bạc24 Huy hiệu đồng1 gold badge13 silver badges24 bronze badges

1 câu trả lời

Python không có điều hướng an toàn nhưng

var name = articles?[0]?.Author?.Name;
8 đã được đề xuất.

i.e.

name = article?.author?.name

Đã trả lời ngày 15 tháng 3 năm 2019 lúc 15:17Mar 15, 2019 at 15:17

Hướng dẫn python safe navigation operator - nhà điều hành điều hướng an toàn python

Antarr Byrdantarr ByrdAntarr Byrd

Phim thương hiệu vàng 23.5K3093 ​​Huy hiệu bạc175 Huy hiệu đồng30 gold badges93 silver badges175 bronze badges

3

  • Cảm ơn. Tôi hy vọng nó sẽ xảy ra sớm.

    Ngày 15 tháng 3 năm 2019 lúc 15:28

  • @Anthony xin lỗi vì đã thất vọng - nhưng nó không phải là một dấu vết để thực hiện. Đừng nín thở.

    - & nbsp; user149341user149341

    Ngày 15 tháng 3 năm 2019 lúc 23:03

Trong lập trình hướng đối tượng, toán tử điều hướng an toàn (còn được gọi là toán tử chuỗi tùy chọn, toán tử cuộc gọi an toàn, toán tử điều kiện null, toán tử không chính xác) là một toán tử nhị phân trả về null nếu đối số đầu tiên của nó là null; Mặt khác, nó thực hiện một thao tác hội nghị phân tích theo quy định của đối số thứ hai (thường là truy cập thành viên đối tượng, chỉ mục mảng hoặc lệnh Lambda).safe navigation operator (also known as optional chaining operator, safe call operator, null-conditional operator, null-propagation operator) is a binary operator that returns null if its first argument is null; otherwise it performs a dereferencing operation as specified by the second argument (typically an object member access, array index, or lambda invocation).

Nó được sử dụng để tránh kiểm tra và bài tập null rõ ràng tuần tự và thay thế chúng bằng chuỗi phương pháp/thuộc tính. Trong các ngôn ngữ lập trình trong đó toán tử điều hướng (ví dụ: ".") Dẫn đến một lỗi nếu được áp dụng cho một đối tượng null, toán tử điều hướng an toàn dừng đánh giá một chuỗi phương thức/trường và trả về null là giá trị của biểu thức chuỗi. Nó lần đầu tiên được Groovy 1.0 sử dụng vào năm 2007 [1] và hiện được hỗ trợ bằng các ngôn ngữ như C#, [2] Swift, [3] TypeScript, [4] Ruby, [5] Kotlin, [6] Rust [7] và khác. Hiện tại không có quy ước đặt tên phổ biến cho toán tử này, nhưng toán tử điều hướng an toàn là thuật ngữ được sử dụng rộng rãi nhất.safe navigation operator is the most widely used term.

Ưu điểm chính của việc sử dụng toán tử này là nó tránh được kim tự tháp của sự diệt vong. Thay vì viết nhiều

var name = articles?[0]?.Author?.Name;
9 lồng nhau, các lập trình viên chỉ có thể sử dụng chuỗi thông thường, nhưng thêm các ký hiệu dấu câu hỏi trước các dấu chấm (hoặc các ký tự khác được sử dụng để xâu chuỗi).

Trong khi người vận hành điều hướng an toàn và toán tử kết hợp NULL đều là người vận hành không nhận thức được, nhưng chúng khác nhau về mặt hoạt động.safe navigation operator and null coalescing operator are both null-aware operators, they are operationally different.

Examples[edit][edit]

Apex[edit][edit]

Ví dụ về nhà điều hành điều hướng an toàn: [8]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;

C#[edit][edit]

C# 6.0 trở lên có

var result = callback?.Invoke(args);
0, nhà điều hành truy cập thành viên điều kiện null (còn được Microsoft gọi là toán tử Elvis và không bị nhầm lẫn với việc sử dụng chung của nhà điều hành ELVIS, tương đương với C# là
var result = callback?.Invoke(args);
1, NULL kết hợp lại toán tử) và
var result = callback?.Invoke(args);
2, toán tử truy cập phần tử điều kiện null, thực hiện cuộc gọi không an toàn null của trình chỉ mục nhận được excessor. Nếu loại kết quả của quyền truy cập thành viên là loại giá trị, thì loại kết quả của truy cập điều kiện null của thành viên đó là phiên bản vô hiệu của loại giá trị đó. [9]

Ví dụ sau lấy tên của tác giả của bài viết đầu tiên trong một loạt các bài viết (với điều kiện mỗi bài viết có thành viên

var result = callback?.Invoke(args);
3 và mỗi tác giả có thành viên
var result = callback?.Invoke(args);
4) và kết quả là
var result = callback?.Invoke(args);
5 nếu mảng là
var result = callback?.Invoke(args);
5 Phần tử là
var result = callback?.Invoke(args);
5, nếu thành viên
var result = callback?.Invoke(args);
3 của bài viết đó là
var result = callback?.Invoke(args);
5 hoặc nếu thành viên
var result = callback?.Invoke(args);
4 của tác giả đó là
var result = callback?.Invoke(args);
5. Lưu ý rằng
(some-> article .author .name)
2 vẫn được ném nếu mảng không có null nhưng trống rỗng (nghĩa là độ dài bằng không).

var name = articles?[0]?.Author?.Name;

Gọi một lambda yêu cầu

(some-> article .author .name)
3, vì không có sự cầu khẩn điều kiện null (
(some-> article .author .name)
4 không được phép).

var result = callback?.Invoke(args);

Clojure[edit][edit]

Clojure không có toán tử thực sự theo nghĩa các ngôn ngữ khác sử dụng nó, nhưng vì nó có thể tương tác với Java và phải thực hiện điều hướng đối tượng khi có, macro ____ 45 [10] có thể được sử dụng để thực hiện điều hướng an toàn.

(some-> article .author .name)

CoffeeScript[edit][edit]

Nhà điều hành hiện sinh: [11]

zip = lottery.drawWinner?().address?.zipcode

Crystal[edit][edit]

Crystal hỗ trợ phương pháp điều hướng an toàn

(some-> article .author .name)
6 [12]

name = article.try &.author.try &.name

Dart[edit][edit]

Nhà điều hành truy cập thành viên có điều kiện: [13]

var name = article?.author?.name

Gosu[edit][edit]

Nhà điều hành gọi an toàn NULL: [14]

var name = article?.author?.name

Toán tử gọi an toàn null không cần thiết cho các thuộc tính lớp được khai báo là thuộc tính GOSU:

class Foo {
    var _bar: String as Bar
}

var foo: Foo = null

// the below will evaluate to null and not return a NullPointerException
var bar = foo.Bar

Groovy[edit][edit]

Toán tử điều hướng an toàn và toán tử chỉ số an toàn: [1] [15]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
0

JavaScript[edit][edit]

Được thêm vào trong ECMAScript 2020, toán tử chuỗi tùy chọn cung cấp một cách để đơn giản hóa việc truy cập các giá trị thông qua các đối tượng được kết nối khi có thể một tham chiếu hoặc chức năng có thể không được xác định hoặc không xác định. [16]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
1

Nó ngắn mạch toàn bộ chuỗi cuộc gọi ở phía bên phải của nó: trong ví dụ sau, thanh không được "truy cập".

Kotlin[edit][edit]

Nhà điều hành cuộc gọi an toàn: [6]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
2

Objective-C[edit][edit]

Cú pháp điều hướng thông thường có thể được sử dụng trong hầu hết các trường hợp mà không liên quan đến các thông điệp cơ bản, khi được gửi đến NULL, bị loại bỏ mà không có bất kỳ hiệu ứng xấu nào.

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
3

PHP[edit][edit]

Nhà điều hành an toàn NULL đã được chấp nhận cho Php 8: [17]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
4

Python[edit][edit]

Toán tử điều hướng an toàn không được hỗ trợ trong Python. Nó đã được đề xuất để đưa vào cú pháp sau: [18]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
5

Raku (Perl 6) [Chỉnh sửa][edit]

Phương pháp an toàn Gọi: [19]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
6

Ruby[edit][edit]

Ruby hỗ trợ toán tử điều hướng an toàn

var name = articles?[0]?.Author?.Name;
7 (còn được gọi là toán tử cô đơn) kể từ phiên bản 2.3.0: [5]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
7

Rust[edit][edit]

Rust hỗ trợ các toán tử ________ 28 [7] và

(some-> article .author .name)
9 cho các cấu trúc thực hiện đặc điểm
zip = lottery.drawWinner?().address?.zipcode
0. [20]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
8

Scala[edit][edit]

Toán tử an toàn null trong scala được cung cấp bởi thư viện dsl.scala. [21] [22]

a[x]?.aMethod().aField // Evaluates to null if a[x] == null
a[x].aMethod()?.aField // returns null if a[x].aMethod() evaluates to null
String profileUrl = user.getProfileUrl()?.toExternalForm();
return [SELECT Name FROM Account WHERE Id = :accId]?.Name;
9

Chú thích

zip = lottery.drawWinner?().address?.zipcode
1 có thể được sử dụng để biểu thị giá trị vô hiệu.

var name = articles?[0]?.Author?.Name;
0

zip = lottery.drawWinner?().address?.zipcode
2 bình thường trong scala không an toàn, khi thực hiện phương thức trên giá trị
var result = callback?.Invoke(args);
5.

var name = articles?[0]?.Author?.Name;
1

Có thể tránh được ngoại lệ bằng cách sử dụng toán tử

var name = articles?[0]?.Author?.Name;
8 trên giá trị vô hiệu hóa thay thế:

var name = articles?[0]?.Author?.Name;
2

Toàn bộ biểu thức là

var result = callback?.Invoke(args);
5 nếu một trong số
var name = articles?[0]?.Author?.Name;
8 được thực hiện trên giá trị
var result = callback?.Invoke(args);
5.

Ranh giới của toán tử an toàn

var result = callback?.Invoke(args);
5
var name = articles?[0]?.Author?.Name;
8 là biểu thức bao quanh gần nhất có loại được chú thích là
zip = lottery.drawWinner?().address?.zipcode
1.

var name = articles?[0]?.Author?.Name;
3

Swift[edit][edit]

Toán tử chuỗi tùy chọn, toán tử chỉ số [3] và cuộc gọi:

var name = articles?[0]?.Author?.Name;
4

TypeScript[edit][edit]

Toán tử chuỗi tùy chọn đã được đưa vào bản phát hành TypeScript 3.7: [4]

var name = articles?[0]?.Author?.Name;
5

Visual Basic .Net [Chỉnh sửa][edit]

Visual Basic 14 trở lên có

var result = callback?.Invoke(args);
0 (toán tử truy cập thành viên điều kiện null) và
name = article.try &.author.try &.name
2 (toán tử chỉ số điều kiện null), tương tự như C#. Chúng có hành vi giống như các toán tử tương đương trong C#. [23]

Câu lệnh sau hoạt động giống hệt với ví dụ C# ở trên.

var name = articles?[0]?.Author?.Name;
6

Xem thêm [sửa][edit]

  • Nhà điều hành Elvis
  • Nhà điều hành NULL kết hợp

References[edit][edit]

  1. ^ ab "Hỗ trợ toán tử đường dẫn tùy chọn (?.)". GitHub. Truy cập 2021-01-04.a b "Support the optional path operator (?.)". GitHub. Retrieved 2021-01-04.
  2. ^"Các toán tử điều kiện không điều kiện (C# và Visual Basic)". Truy cập 2016-01-28. "Null-conditional Operators (C# and Visual Basic)". Retrieved 2016-01-28.
  3. ^ ab "Chuỗi tùy chọn". Truy cập 2016-01-28.a b "Optional Chaining". Retrieved 2016-01-28.
  4. ^ ab "TypeScript 3.7". Truy cập 2019-11-06.a b "Typescript 3.7". Retrieved 2019-11-06.
  5. ^ ab "Ruby 2.3.0 phát hành". Truy cập 2016-01-28.a b "Ruby 2.3.0 Released". Retrieved 2016-01-28.
  6. ^ AB "NULL AN TOÀN". Truy cập 2016-01-28.a b "Null Safety". Retrieved 2016-01-28.
  7. ^ ab "toán tử đánh dấu câu hỏi, & nbsp ;?". Truy cập 2021-10-04.a b "The question mark operator, ?". Retrieved 2021-10-04.
  8. ^"Salesforce Winter 21 Ghi chú phát hành". Lực lượng bán hàng. Truy cập 2020-10-13 .________ 63: CS1 Duy trì: URL-status (liên kết) "Salesforce Winter 21 Release Notes". Salesforce. Retrieved 2020-10-13.
    name = article.try &.author.try &.name
    
    3: CS1 maint: url-status (link)
  9. ^"Các toán tử truy cập thành viên (tham chiếu C#)". Tài liệu Microsoft. Microsoft. Truy cập ngày 29 tháng 8 năm 2019. "Member access operators (C# reference)". Microsoft Docs. Microsoft. Retrieved 29 August 2019.
  10. ^"Hướng dẫn Macros luồng". Truy cập 2019-06-07. "Threading Macros Guide". Retrieved 2019-06-07.
  11. ^"Các hoạt động hiện sinh". Truy cập 2017-06-15. "The Existential Operatior". Retrieved 2017-06-15.
  12. ^"API Crystal: Đối tượng#Hãy thử". "Crystal API: Object#try".
  13. ^"Các nhà khai thác khác". Một chuyến tham quan ngôn ngữ phi tiêu. Truy cập 2020-01-08 .________ 63: CS1 Duy trì: URL-status (liên kết) "Other Operators". A tour of the Dart language. Retrieved 2020-01-08.
    name = article.try &.author.try &.name
    
    3: CS1 maint: url-status (link)
  14. ^"Ngôn ngữ lập trình Gosu". Truy cập 2018-12-18. "The Gosu Programming Language". Retrieved 2018-12-18.
  15. ^"8.5. Toán tử chỉ số an toàn". Truy cập 2020-09-25. "8.5. Safe index operator". Retrieved 2020-09-25.
  16. ^"Chuỗi tùy chọn". "Optional Chaining".
  17. ^"PHP: rfc: nullsafe_operator". Wiki.php.net. Truy cập 2020-10-01. "PHP: rfc:nullsafe_operator". wiki.php.net. Retrieved 2020-10-01.
  18. ^"PEP 505-Các nhà khai thác không biết". Truy cập 2018-08-27. "PEP 505 -- None-aware operators". Retrieved 2018-08-27.
  19. ^"Các nhà khai thác Raku". Truy cập 2022-09-16. "Raku Operators". Retrieved 2022-09-16.
  20. ^"Đặc điểm std :: ops :: thử". Truy cập 2019-02-26. "Trait std::ops::Try". Retrieved 2019-02-26.
  21. ^Một khung để tạo các ngôn ngữ dành riêng cho miền nhúng trong Scala: ThinkWorksinc/DSL.Scala, ThinkWorks Inc., 2019-06-03, Truy cập 2019-06-03 A framework to create embedded Domain-Specific Languages in Scala: ThoughtWorksInc/Dsl.scala, ThoughtWorks Inc., 2019-06-03, retrieved 2019-06-03
  22. ^"NULLSAFE: Kotlin / Groovy có hương vị NULL-SAFE & NBSP ;? Nhà điều hành bây giờ trong Scala". Người dùng Scala. 2018-09-12. Truy cập 2019-06-03. "NullSafe: Kotlin / Groovy flavored null-safe ? operator now in Scala". Scala Users. 2018-09-12. Retrieved 2019-06-03.
  23. ^"?. và & nbsp;? () Các toán tử điều kiện không điều kiện (Visual Basic)". Tài liệu Microsoft. Microsoft. Truy cập ngày 29 tháng 8 năm 2019. "?. and ?() null-conditional operators (Visual Basic)". Microsoft Docs. Microsoft. Retrieved 29 August 2019.

Liên kết bên ngoài [Chỉnh sửa][edit]

  • PEP 505, thảo luận về khả năng các nhà khai thác điều hướng an toàn cho Python