Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?

Tôi đã dành phần lớn sự nghiệp của mình để làm việc với các ngôn ngữ sử dụng dấu ngoặc nhọn {} để phân định các khối mã hoặc cấu trúc dữ liệu và để xác định cấu trúc phân cấp. C và các công cụ phái sinh của nó sử dụng chúng, cũng như Java, JavaScript và JSON, để trích dẫn một số ngôn ngữ phổ biến nhất hiện nay. Tuy nhiên, có những ngôn ngữ phổ biến tránh dấu ngoặc nhọn để ủng hộ khoảng trắng bắt buộc. YAML, đôi khi được sử dụng thay cho JSON để xác định các đối tượng dữ liệu và Python

Sau một vài thập kỷ sử dụng các ngôn ngữ có dấu ngoặc nhọn, Python đã giúp tôi đắm mình vào một ngôn ngữ khoảng trắng (lưu ý. Tôi không nói về “ngôn ngữ lập trình bí truyền” có tên là “khoảng trắng”). Ban đầu tôi cũng hoài nghi như nhân vật này trong phim hoạt hình phản trọng lực nhập khẩu XKCD nổi tiếng

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?

Tuy nhiên, vì hầu hết những người chuyển sang Python từ ngôn ngữ khác đều báo cáo, sau một thời gian ngắn, tôi đã quen với việc sử dụng khoảng trắng và nhanh chóng thích nó hơn. Sau đó tôi tự hỏi tại sao nhiều ngôn ngữ khác không làm được như Python

Tôi cảm thấy câu trả lời là sự kết hợp giữa truyền thống và xu hướng làm mọi thứ dễ dàng hơn cho máy tính thay vì lập trình viên. Ngày trước C cực kỳ phổ biến và nhiều ngôn ngữ đã xuất hiện kể từ C (bao gồm cả Python) lấy gợi ý từ cách mà C triển khai mọi thứ. Tôi đã tự viết trình phân tích cú pháp và việc có các ký tự dành riêng để phân định các khối giúp viết trình phân tích cú pháp dễ dàng hơn. Nó cũng cho phép mã nguồn được thu nhỏ bằng cách loại bỏ càng nhiều khoảng trắng càng tốt để hình ảnh thu được có thể được truyền nhanh nhất có thể qua mạng băng thông thấp nơi mọi ký tự đều được tính. Điều này ít đáng lo ngại hơn so với thời của modem tương tự, nhưng nó vẫn còn quan trọng trong một số trường hợp

Tuy nhiên, niềng răng khiến cuộc sống của lập trình viên trở nên khó khăn hơn một chút. Các lập trình viên thường không viết mã được rút gọn nhiều. chúng ta cần viết mã có thể đọc được, bởi chính chúng ta bây giờ và trong tương lai, cũng như bởi những người khác. Vì vậy, chúng tôi cũng thụt lề mã của mình bằng cách sử dụng khoảng trắng. Khi viết bằng ngôn ngữ có dấu ngoặc nhọn, chúng ta cần xác định chính xác các khối của mình bằng dấu ngoặc nhọn và thụt lề các khối một cách chính xác

Các IDE hiện đại có ích, nhưng đôi khi, điển hình là khi sao chép các đoạn mã, mọi thứ không đồng bộ. chúng tôi quên lấy tất cả các dấu ngoặc đóng cho một khối hoặc chúng tôi chèn khối ở một cấp độ khác của hệ thống phân cấp yêu cầu thụt đầu dòng khác. Đôi khi IDE có thể tìm ra những gì chúng tôi đang cố gắng thực hiện, nhưng đôi khi thì không. Sau đó, chúng tôi sẽ tìm kiếm xung quanh để đảm bảo rằng tất cả các dấu ngoặc đóng đều ở đúng vị trí và vết lõm cũng chính xác

Đối với một ngôn ngữ khoảng trắng, một nửa thách thức đó đã tránh được. bạn chỉ cần có được thụt đầu dòng chính xác. Làm đúng một điều dễ hơn làm đúng hai điều, vì vậy việc lập trình bằng ngôn ngữ khoảng trắng sẽ dễ dàng và nhanh hơn một chút

Tác dụng phụ khác của các ngôn ngữ khoảng trắng, đặc biệt đúng khi so sánh YAML với JSON, là bạn tránh được số lượng lớn các dòng chỉ chứa dấu chấm câu để đóng các khối trong một hệ thống phân cấp được lồng ghép chặt chẽ. Tỷ lệ phần trăm dòng trong tệp chứa văn bản cao hơn, mã trông gọn gàng hơn và nhiều logic hơn hiển thị trên màn hình tại bất kỳ thời điểm nào. Kích thước tệp ngắn hơn. Tại công ty trước đây của tôi, nhà phát triển giao diện người dùng của chúng tôi là người duy nhất có màn hình mà anh ấy liên tục xoay sang chế độ dọc để anh ấy có thể xem các tệp JSON và JavaScript dài

Máy có thể hiểu mã có định dạng kém, khó hiểu (thậm chí được rút gọn) mà không gặp vấn đề gì. Tuy nhiên, đối tượng chính của mã nguồn là con người. Để có thể đọc được, mã nguồn phải được thụt vào và chứa khoảng trắng. Và nếu khoảng trắng là tất cả những gì con người cần để hiểu mã, như sự phổ biến của YAML và Python dường như đã chứng minh, thì đó là lựa chọn tốt hơn cho các nhà thiết kế ngôn ngữ

Bây giờ, nếu tôi thực sự muốn bắt đầu một cuộc tranh luận, chúng ta có thể thảo luận về việc sử dụng bao nhiêu khoảng trắng khi thụt lề các khối. Tất cả những gì tôi sẽ nói về điều này là tôi rất vui vì Guido đã chuẩn hóa 4 khoảng trắng cho Python (mặc dù trình thông dịch CPython chấp nhận các giá trị khác), vì vậy hầu như tất cả mã Python đều được định dạng nhất quán. YAML, tuy nhiên, là một câu chuyện khác

nó có thể dẫn đến cú pháp trở nên bảo thủ;

Điều này có thể được giải quyết với thiết kế phù hợp. Nếu các khối được thụt lề phải được căn chỉnh theo số lượng khoảng trắng đặt trước cho mỗi chỗ thụt lề, thì các khối thụt lề khác có thể là phần tiếp theo. Đây là cách tôi đã thiết kế trình phân tích cú pháp của mình cho ngôn ngữ mà tôi đang làm việc. Tôi nhận thấy Scala không đưa ra quyết định thiết kế này nên tôi đoán rằng sẽ có vấn đề

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Cung cấp "fewerBraces" bên ngoài bản phát hành ảnh chụp nhanh

đây là nhiều cách để thể hiện khoảng trắng, xem cuộc tranh luận về khoảng trắng và tab vô tận và bạn cần công cụ thông minh tốt để nhận ra điều này và thực hiện chuyển đổi ngay tại chỗ, điều này dễ dàng hơn nhiều khi bạn có dấu ngoặc nhọn và khó hơn khi khoảng trắng đó có

Đối với không có vòng đeo tay, tôi thực sự khuyên bạn chỉ nên đặt các tab ngoài vòng pháp luật và hoàn thành nó. Chọn 3 dấu cách để thụt đầu dòng và kết thúc vấn đề một lần và mãi mãi. Đối với các tab cho phép được chuẩn bị sẵn và bất kỳ thứ gì tùy ý để tạo ra sự điên rồ và mâu thuẫn tối đa. Hãy để mọi người chọn chất độc của họ

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Cung cấp "fewerBraces" bên ngoài bản phát hành ảnh chụp nhanh

Tôi không thích việc Scala chuyển sang cú pháp khoảng trắng quan trọng, vì tôi cảm thấy rằng Python đã thành công không phải vì cú pháp quan trọng của nó, mà là do nó

Tôi cá là điều ngược lại mới đúng, tính năng khoảng trắng của Python góp phần vào sự phổ biến của nó

hỏi đáp

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?

Bạn có nghĩ rằng thụt đầu dòng trong Python là khó chịu?

Trả lời (1 trên 19). Vâng, đó là một ý tưởng tồi không thể tin được và đã tự tay phá hỏng ngôn ngữ đối với tôi đến mức khiến nó và bất kỳ khuôn khổ nào được viết trong đó đều không thể sử dụng được. Hãy để tôi giải thích tại sao nó rất tệ. Lập luận phổ biến ủng hộ điều này là nó

Hành vi không xác định – 18 tháng 10 11
Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?

Tại sao quy tắc khoảng trắng của Python là đúng

Python nổi tiếng trong số các ngôn ngữ lập trình vì cú pháp khá độc đáo của nó. thay vì được phân định bằng dấu ngoặc nhọn hoặc từ khóa “bắt đầu/kết thúc”, các khối được phân cách bằng dấu thụt đầu dòng. tự nhiên…

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Cung cấp "fewerBraces" bên ngoài bản phát hành ảnh chụp nhanh

Mong muốn của tôi là cú pháp phải rõ ràng, không có sự mơ hồ. Và tốt nhất là với số lượng lựa chọn hạn chế

Scala đã hỗ trợ bạn. Bạn vẫn có thể sử dụng dấu ngoặc nhọn. Nếu bạn là kiểu người thích thụt lề không nhất quán, sử dụng các tab không nhất quán và thêm tiếng ồn của dấu ngoặc nhọn, thì bạn đã không bị bỏ rơi. Nhưng tại sao bạn phải buộc phần còn lại của chúng tôi để đưa ra lựa chọn của bạn?

Khi có sự phân chia sở thích không thể giải quyết được, thì quyết định phải được đưa ra xem nên ưu tiên cái này hơn cái kia hay phù hợp với cả hai

Kiểu mã hóa thụt lề không có dấu ngoặc so với kiểu mã hóa có dấu ngoặc nhọn là một sự khác biệt không thể giải quyết được. Họ là hai phong cách riêng biệt. Nếu bạn muốn thu hút những người thực sự thích đeo tay, thì bạn có thể thu hút đám đông đó bằng cách cung cấp. Nếu bạn không quan tâm đến họ, thì họ có thể viết một bộ chuyển mã mà tôi sẽ làm nếu không. Nhưng tôi thực sự thích đánh dấu cú pháp trong IDE hơn. Vì vậy, một trong hai cách sẽ có một phân nhánh. Bằng cách coi thường phía bên kia, chỉ tạo ra sự thù địch mà không đạt được mục tiêu gulag của bạn. Bạn không thể nhốt mọi người vào tù nếu họ cảm thấy đủ mạnh mẽ về sở thích của mình. Ngoại tác của Coase được áp dụng

Đối với lambdas rất dài, tôi không phiền nếu đó là ngôn ngữ, nhưng điều tôi đang ủng hộ là không tạo ra một loạt các trường hợp đặc biệt phức tạp. Tìm một cú pháp thông thường cho phép nó hoạt động mạch lạc, chẳng hạn như đề xuất dấu hai chấm, có những lợi ích khác như tôi đã chỉ ra

Sau đó, vâng, tôi có thể tránh các lambda dài như tôi muốn và bạn có thể có chúng theo ý muốn. Một lợi ích khác của việc đặt tên lambdas dài là sử dụng lại như bạn đã đề cập trong những trường hợp hàm được truyền nhiều lần

CỘNG. rõ ràng là đã có dấu ngoặc nhọn cho lambdas rất dài. Vì vậy, có thể bỏ qua hỗ trợ không vòng đeo tay cho lambdas dài vì không đáng để nhầm lẫn hoặc có thể có một số cú pháp thông thường có khả năng ứng dụng rộng hơn (không chỉ là trường hợp đặc biệt) mà cũng ít ẩn ý hơn (do đó ít gây nhầm lẫn hơn cho người mới), chẳng hạn như . Từ khi nào các khối trở thành tham số lambda trong Scala? . Tôi hy vọng điều đó dễ thấy trong Sách Scala

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Cung cấp "fewerBraces" bên ngoài bản phát hành ảnh chụp nhanh

Có thể nó đã quen, nhưng tôi thực sự không rõ ràng rằng assert(true) là một tham số chứ không phải là một loại nội dung nào đó khi nó được giới thiệu với :. Tôi mong đợi một cách trực giác rằng : sẽ tách biệt một cái tên và một định nghĩa

Được rồi, tôi đã tìm thấy thông số kỹ thuật mà tôi đã thấy trong những ngày trước khi tôi xem xét Scala 3

https. //hơi điên. epfl. ch/docs/tham khảo/tính năng mới khác/thụt lề. html

Vì vậy, trí nhớ của tôi đã chính xác rằng dấu hai chấm là tùy chọn trong một số trường hợp và có một số quy tắc phức tạp về phần cuối dòng nào có thể kích hoạt khối thụt đầu dòng đủ điều kiện. Loại phức tạp này là những gì tôi đang chống lại

Đơn giản hơn nhiều là các vết lõm luôn bắt đầu ở 3 khoảng trắng và nếu trình phân tích cú pháp phát hiện một khối không nên có một khối thì sẽ xảy ra lỗi. Sau đó, chúng tôi không cần tất cả các trường hợp đặc biệt này trong đặc tả được liên kết ở trên. Ngoài ra, vì một phần tiếp theo của dòng lợi ích bổ sung sẽ được bật, chỉ cần không thụt lề chúng thành bội số của 3 khoảng trắng. hãy đơn giản hóa. Thiết kế hiện tại đang lặp lại cùng một lỗi đã mắc phải trong quá khứ khiến Scala trở nên khó hiểu một cách không cần thiết. Vui lòng chọn quy tắc đơn giản hơn. Nó được gọi là nguyên tắc Keep It Simple Stupid (các mod đừng đổ lỗi cho tôi vì tôi không nghĩ ra thuật ngữ này và nó thực sự không có ý nghĩa xúc phạm)

@martijnhoekstra, tôi chia sẻ sự bất đồng về nhận thức của bạn dường như xuất phát từ việc một hàm lấy một khối làm tham số đầu vào không trực quan như thế nào. Điều này khá lạ. Và đặt lambdas dài trong các khối ngoặc nhọn để biến chúng thành tham số đầu vào cũng lạ. Được cấp một tính năng sử dụng năng lượng cần thiết, nhưng vẫn còn lạ. Bất kỳ người mới nào cũng sẽ vấp phải điều đó

Tuy nhiên, ví dụ của bạn thậm chí còn kỳ lạ hơn vì nó không phải là lambda. Tôi cho rằng nó đang vượt qua loại Unit? . Dấu hai chấm được sử dụng ở đâu trong Scala để phân định tên và định nghĩa của nó? . Hoặc có thể bạn đang đề cập đến một ngôn ngữ khác?

Vì vậy, nỗ lực làm cho nó tự nhiên hơn bằng cách đặt danh sách tham số của lambda và mũi tên trên cùng một dòng với hàm làm cho phần thân khối theo sau có phần trực quan hơn nhưng đó là trường hợp đặc biệt có sự không nhất quán như trường hợp một dòng yêu cầu . Và khối Unit không phải lambda dưới dạng tham số chức năng là một trường hợp khác

Tôi nghĩ rằng thông số Unit là tài liệu dành cho người sử dụng điện. Có lẽ họ nên vẫn còn dấu ngoặc nhọn? . Truyền Unit cho một chức năng là điều rất kỳ lạ đối với người mới sử dụng Scala. Có lẽ chúng ta nên gọi điều đó một cách rõ ràng cho những người mới đang áp dụng phong cách không vòng đeo tay

Nếu bạn áp dụng đề xuất của tôi để mã hóa cứng phần thụt lề cho các khối không có nẹp thì bạn không cần dấu hai chấm có tiền tố cho lambdas, vì bạn sẽ có phần tiếp theo của dòng hoặc khối được thụt lề được xác định bởi phần thụt đầu dòng của dòng tiếp theo. Lambdas một dòng (và tôi cho rằng có lẽ cũng có thể tiếp tục dòng?) Yêu cầu dấu ngoặc đơn có lẽ như chúng luôn làm?

Nhiều danh sách tham số (và tôi đoán thực tế là bất kỳ danh sách tham số nào được phân cách bằng dấu phẩy) lấy một khối lambda hoặc khối Unit làm bất kỳ nhưng tham số cuối cùng phải được yêu cầu để lấy các dấu ngoặc nhọn sẽ hoàn thành cả mục tiêu của Odersky để ngăn cản chúng (danh sách nhiều tham số)

CHỈNH SỬA. các khối không có nẹp được phân tách bằng dấu phẩy (hoặc dấu hai chấm) cũng khó hiểu, khó đọc và không được phép sử dụng? . Cho phép các khối không có dấu ngoặc nhọn của Lambda (và các đối tác) nhưng chỉ ở dạng tham số cuối cùng, nếu không thì phải được đặt trong dấu ngoặc nhọn

CHỈNH SỬA#2. Về đề xuất của tôi về việc sử dụng 3 dấu cách làm thụt lề tiêu chuẩn và được thi hành, nó sẽ giải quyết lỗi tiềm ẩn được chỉ ra trong chuỗi thảo luận dài tháng 1 đó đã bị đóng nên tôi không thể trả lời ở đó

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Đã tìm kiếm phản hồi. Niềng răng tùy chọn Thiết kế ngôn ngữ

Tôi nghĩ một vấn đề là khả năng tương thích ngược. Giả sử mã cũ của bạn có một khoảng trắng đi lạc, như vậy. lớp A đối tượng B Nó sẽ được Dotty diễn giải khác với các phiên bản Scala trước đây
class A
 object B

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Tôi thực sự không thể hiểu làm thế nào các khối thụt lề có thể khó đọc hơn mã không thụt lề có dấu ngoặc nhọn?

Đã có một chủ đề lớn về điều này một thời gian trước, đây là một ví dụ từ đó cho thấy một ví dụ về loại mã có thể khó phân tích cú pháp trực quan đối với một số nhà phát triển

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
Đã tìm kiếm phản hồi. Niềng răng tùy chọn Thiết kế ngôn ngữ

Nó thực sự đơn giản hơn thế nhiều, nguyên nhân gây ra vấn đề là như thế này. lớp foo. def foo =. chắc chắn đảm bảoA. F[A] =. . . chắc chắn đảm bảoB. F[B] =. . . def ensureC. F[C] =. . . for a <- ensureA b <- ensureB c <- ensureC mang lại baz(a,b,c) def bar =. Tôi gặp rắc rối với những nội dung nhãn cầu như nếu for là một phần của ensureC hoặc trực tiếp bên trong foo, hoặc nếu e…

Về cơ bản, nếu không có dấu ngoặc nhọn đóng vai trò là dấu chấm câu, bạn rất dễ bị mất dấu mức độ thụt đầu dòng của một thứ gì đó, đặc biệt là khi có nội dung nằm giữa nó và đường tham chiếu mở khối. Ít nhất đối với tôi, đó là một thứ xử lý trực quan và dường như không phải là thứ mà tôi có thể mạnh mẽ vượt qua (giống như nếu một ngôn ngữ lập trình bắt buộc nền phải có màu đỏ và số nhận dạng màu xanh lá cây)

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Lưu ý nếu assert(true)1 được kéo dài phía trên đầu cửa sổ của bạn, thì dấu ngoặc đóng sẽ không rõ ràng

Mặc dù đúng, nhưng nó ít mơ hồ hơn đáng kể và công cụ (như nó hiện đang tồn tại) cần một thứ gì đó để kích hoạt gợi ý về thời điểm khối bắt đầu, vì vậy việc xử lý sẽ dễ dàng hơn nhiều

Một vấn đề khác là, đối với tôi, mẫu rất khó đọc ngay cả khi toàn bộ mã mẫu được chứa hoàn toàn trong một màn hình duy nhất, do đó, đó là tình huống “đôi khi có thể tệ” so với “luôn tệ, đôi khi tệ hơn. ”

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Các đường thẳng đứng có thể được tô màu để bạn không phải đếm chúng. IDE có thể được lập trình dễ dàng để đưa bạn trực tiếp đến (hoặc bật nó lên) dòng trước đó của khối

Điều này quay trở lại lời phàn nàn thường xuyên rằng điều này được thực hiện quá nhanh và loại bỏ những lo ngại bằng cách tham khảo công cụ hiện không tồn tại vừa phổ biến vừa khó chịu và không đặc biệt hữu ích hoặc yên tâm

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Tôi đồng cảm với tuyên bố của bạn là mắc chứng tự kỷ và mắc chứng khó đọc

Mặc dù tôi mắc chứng tự kỷ nhưng tôi không mắc chứng khó đọc - đó chỉ là sự tương tự gần nhất có vẻ hợp lý với mọi người khi tôi mô tả cách tôi nhìn thấy các khối mã này

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Chúng ta có thể tìm thấy một đôi bên cùng có lợi ở đây không?

Chúng tôi có thể đã có thể, nếu điều này đã được xử lý khác nhau. Như vậy, điều này sẽ thực sự làm hỏng Scala vì nó sẽ chỉ chuyển Scala xuống cho các công ty nhỏ. Ngay sau khi bạn vượt qua một số nhà phát triển, khả năng cao là bạn sẽ phải bỏ qua một ứng viên thực sự hấp dẫn cho vị trí Kỹ sư cấp cao vì họ cực kỳ không thích (hoặc đơn giản là không thể đọc được) loại mã mà bạn đang sử dụng.

Và đó thậm chí không phải là trường hợp xấu nhất. khi hợp nhất hai công ty sử dụng Scala, tỷ lệ cược bắt đầu trở nên khá tồi tệ là một trong các nhóm sẽ được bảo lãnh vì họ thua trong cuộc tranh luận về việc sử dụng phong cách nào và tất cả kiến ​​​​thức về thể chế đó bị mất

Các công ty có xu hướng ngại chấp nhận loại rủi ro đó. Tôi hiện đang cố gắng ngăn công ty của chúng tôi chuyển sang Java vì những thứ như thế này và thành thật mà nói, tôi không đạt được nhiều thành công

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Ai đó không thể viết một trình dịch từ khối thụt lề sang dấu ngoặc nhọn để mỗi kiểu có thể được dịch sang kiểu khác để đọc?

Điều này tồn tại cho Python. Về cơ bản không ai sử dụng nó, vì vậy nó có thể không tốt để sử dụng. Tôi tưởng tượng rằng điều đó sẽ tồi tệ hơn đối với Scala, vì việc thiếu dấu ngoặc nhọn hoặc sự bao gồm của chúng ở nơi chúng có thể bị bỏ qua trong Scala 2 đã được sử dụng để báo hiệu sự hiện diện của các tác dụng phụ hoặc thông báo rằng một thứ gì đó là một biểu thức duy nhất

Nếu chúng ta giả định về sự tồn tại của công cụ giả định, thì IntelliJ khá giỏi trong việc đoán khi nào bạn muốn thêm chúng (mặc dù đôi khi nó vẫn sai một cách buồn cười) và việc che giấu thứ gì đó khó hơn nhiều so với việc thêm lại nếu nó

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
morgen-peschke

khả năng cuối cùng bạn phải chuyển một ứng viên thực sự hấp dẫn cho vị trí Kỹ sư cấp cao vì họ cực kỳ không thích (hoặc đơn giản là không thể đọc được) loại mã mà nhóm hiện có đang sử dụng phát triển cực kỳ nhanh chóng

Và đó thậm chí không phải là trường hợp xấu nhất. khi hợp nhất hai công ty sử dụng Scala, tỷ lệ cược bắt đầu trở nên khá tồi tệ là một trong các nhóm sẽ được bảo lãnh vì họ thua trong cuộc tranh luận về việc sử dụng phong cách nào và tất cả kiến ​​​​thức về thể chế đó bị mất

FUD và Cuộc diễu hành khủng khiếp của bạn dường như không ảnh hưởng gì đến tôi. Chưa bao giờ bắn một cục máu đông nào và cầu xin tất cả những người tôi biết với kẻ giết người exosome hãy thở vào mặt tôi và cho tôi nếm một mẫu đờm của họ. Tiếp tục cố gắng để có kết quả xét nghiệm dương tính nhưng những điều chết tiệt dường như không tương quan với thực tế — hoặc ít nhất là thực tế mà chúng muốn nói với chúng ta

Hai công ty đối lập về tôn giáo sẽ không bao giờ là ứng cử viên cho việc sáp nhập bất kể công ty đó đã chọn hai kiểu mã hóa Scala hay Python (hoặc trình chuyển mã của tôi thành Scala không vòng đeo tay) và Scala được chuẩn bị sẵn. Bạn sẽ không thể ngăn ai đó tạo Scala không vòng đeo tay. Các công ty phản đối tôn giáo sẽ không tuân theo bất kỳ nhà tù nào mà bạn định áp đặt cho họ. Tranh luận về quyền kiểm soát mà bạn không sở hữu là ngụy biện. Đó là định mệnh và nếu bạn không làm điều đó một cách chính thức thì bạn có thể kết thúc với một số hương vị khác nhau của nó, điều này sẽ là một kết quả tồi tệ hơn (điểm giống như tôi đã nói về các loại không dấu, tốt hơn là nên nắm lấy nó một cách chính thức và được bảo vệ bởi một cờ trình biên dịch tùy chọn . Hãy cắn viên đạn vì cuối cùng bạn không có lựa chọn nào khác và tốt hơn hết là hãy chính thức dẫn đầu về nó

Đối với một Sr. Kỹ sư anh ấy sẽ chọn công ty sử dụng phong cách viết mã mà anh ấy thích. tôi không thấy có vấn đề gì. Trừ khi bạn đang tranh luận, anh ta sẽ cần đọc các thư viện Scala và do đó sẽ bị tắt nếu chúng không theo phong cách ưa thích của anh ta. Nhưng bao nhiêu lập trình viên đã tắt Scala từ trước đến nay vì thiếu phong cách không tay? . Bạn mất một số, bạn đạt được một số. Nhưng chắc chắn hệ sinh thái sẽ phát triển vì có sẵn hai phong cách viết mã để khiến nhiều người hài lòng hơn

Cá nhân tôi sẽ không phản đối nếu các thư viện Scala vẫn ở kiểu dấu ngoặc nhọn. Đối với tôi, phong cách không dây phù hợp hơn với người dùng nhỏ tuổi, những người có lẽ sẽ không đọc thư viện. Mặc dù tôi chưa đủ tuổi và tôi sẽ sử dụng không có vòng đeo tay nhưng tôi không gặp vấn đề gì khi đọc có niềng răng. Tôi thích không tay sạch sẽ hơn, đồng đều hơn (có thể là tổ tiên người Đức của tôi, mặc dù tôi cũng có tiếng Wales, Ailen và Thụy Sĩ-Pháp-Ý)

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
morgen-peschke

Các công ty có xu hướng ngại chấp nhận loại rủi ro đó. Tôi hiện đang cố gắng ngăn công ty của chúng tôi chuyển sang Java vì những thứ như thế này và thành thật mà nói, tôi không đạt được nhiều thành công

Họ không cần nhiều tính năng Scala. Có thể đây là một bộ lọc tốt cho những người dùng thực sự cần Scala và do đó sẽ là những người ủng hộ nó nhiệt tình nhất. Tôi thực sự cần các lớp loại và các liên kết ẩn danh, vì vậy Java không phải là một lựa chọn cho tôi bất kể

Ngoài ra, tôi nghĩ rằng các công ty lớn dù sao cũng không sử dụng Scala, bởi vì bề ngoài họ ưu tiên bề rộng của nhóm nhà phát triển hơn các tính năng bí truyền, thú vị. Vì vậy, họ sẽ chọn Java hay Kotlin bất kể. Vì vậy, mối đe dọa có lẽ hầu như không liên quan. Tùy chọn không vòng đeo tay có thể tăng số lượng nhà phát triển Scala cơ sở

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
morgen-peschke

Điều này tồn tại cho Python. Về cơ bản không ai sử dụng nó, vì vậy nó có thể không tốt để sử dụng. Tôi tưởng tượng rằng điều đó sẽ tồi tệ hơn đối với Scala, vì việc thiếu dấu ngoặc nhọn hoặc sự bao gồm của chúng ở nơi chúng có thể bị bỏ qua trong Scala 2 đã được sử dụng để báo hiệu sự hiện diện của các tác dụng phụ hoặc thông báo rằng một thứ gì đó là một biểu thức duy nhất

Nếu chúng ta giả định về sự tồn tại của công cụ giả định, thì IntelliJ khá giỏi trong việc đoán khi nào bạn muốn thêm chúng (mặc dù đôi khi nó vẫn sai một cách buồn cười) và việc che giấu thứ gì đó khó hơn nhiều so với việc thêm lại nếu nó

Có lẽ không ai sử dụng nó vì Python không thể tùy chọn biên dịch mã dấu ngoặc nhọn nên tất cả những người hâm mộ dấu ngoặc nhọn đã rời đi?

Tôi không hiểu tại sao một công cụ không thể chèn một dấu ngoặc một cách xác định vào vị trí của mọi khối không có dấu ngoặc? . Đối với các trường hợp tùy chọn khác không bắt buộc phải là khối và không được đánh dấu rõ ràng là khối trong mã không có nẹp, tôi đoán đó là ý định của tác giả, vậy có thể kết quả dịch đúng như ý định của tác giả?

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
morgen-peschke

vì vậy nếu ai đó thực sự không thể niềng răng, họ luôn có các lựa chọn

Không vì trước đây trình biên dịch sẽ không biên dịch mã không có vòng đeo tay của tôi và IDE không hiểu nó

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

FUD và Cuộc diễu hành khủng khiếp của bạn dường như không ảnh hưởng gì đến tôi

Điều này thật đáng tiếc, vì mối quan tâm của tôi không phải là. Chia đôi nhóm nhà phát triển chưa bao giờ kết thúc tốt đẹp, ngay cả đối với các ngôn ngữ có tư duy lớn hơn nhiều so với Scala hiện đang được hưởng. Đó là một thập kỷ khó chịu khi Python hầu như không thể bỏ lại phía sau và đó là một yếu tố quan trọng dẫn đến sự bùng nổ của cộng đồng Perl

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Hai công ty đối lập về mặt tôn giáo sẽ không bao giờ là ứng cử viên cho việc sáp nhập bất kể công ty đó đã chọn hai kiểu mã hóa Scala hay Python (hoặc trình chuyển mã của tôi thành Scala không vòng đeo tay) và Scala được chuẩn bị sẵn

Cái kia thật đáng yêu. Các giám đốc điều hành cấp C không thực sự quan tâm đến các chi tiết kỹ thuật của công ty mà họ đang muốn mua lại, họ quan tâm đến việc duy trì, rủi ro và chi phí tuyển dụng. Một công ty được xây dựng trên nền tảng Java sẽ không ngần ngại mua lại một công ty đang chạy nền tảng Python (hoặc ngược lại) vì một trong hai ngôn ngữ này tương đối dễ tuyển dụng và họ cho rằng sự mất mát trong chia sẻ tư duy sẽ là tình huống Ship of Theseus

Họ sẽ ít quan tâm hơn đến việc chọn công ty được xây dựng trên nền tảng công nghệ dựa trên các ngôn ngữ ít quen thuộc hơn và Scala hiện vẫn đủ điều kiện - nhưng trở thành ngôn ngữ JVM sẽ hữu ích ở đây vì CTO có thể trấn an họ rằng mọi thứ sẽ ổn.

Họ sẽ trở nên thực sự khó hiểu nếu Scala phát triển danh tiếng là “ngôn ngữ với các nhà phát triển có xu hướng rời bỏ hàng loạt khi có được” - trực giác của tôi là bạn sẽ mất người nhanh hơn rất nhiều khi một lần cam kết có thể viết lại hoàn toàn

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Đối với một Sr. Kỹ sư anh ấy sẽ chọn công ty sử dụng phong cách viết mã mà anh ấy thích. tôi không thấy có vấn đề gì

Vấn đề là họ đã rất khó tuyển dụng, vì vậy việc giảm bớt nhóm ứng viên quan tâm hơn nữa là một ý tưởng thực sự tồi

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Họ không cần nhiều tính năng Scala. Có thể đây là một bộ lọc tốt cho những người dùng thực sự cần Scala và do đó sẽ là những người ủng hộ nó nhiệt tình nhất. Tôi thực sự cần các lớp loại và các liên kết ẩn danh, vì vậy Java không phải là một lựa chọn cho tôi bất kể

Đó là tất cả những thứ tốt đẹp để có. Không tồn tại một thuật toán nào có thể được triển khai trong Scala mà không phải Java. Việc lập trình trong Scala có thể dễ dàng hơn, nhanh hơn và thú vị hơn rất nhiều, nhưng chúng ta đừng ảo tưởng ở đây - nếu các công ty không thể thuê các nhà phát triển Scala một cách đáng tin cậy để làm việc tốt với các nhóm hiện có, thì họ sẽ không sử dụng Scala. Việc chia nhóm nhà phát triển sẽ làm trầm trọng thêm vấn đề này

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Đối với các trường hợp tùy chọn khác không bắt buộc phải là khối và không được đánh dấu rõ ràng là khối trong mã không có nẹp, tôi đoán đó là ý định của tác giả, vậy có thể kết quả dịch đúng như ý định của tác giả?

Vấn đề ở đây là, sau khi bị xóa, thông tin về dấu ngoặc nhọn nào được bao gồm rõ ràng sẽ bị mất, do đó, mã khứ hồi có thể trông rất khác

Tại sao python sử dụng thụt đầu dòng thay vì dấu ngoặc nhọn?
shelby3

Không vì trước đây trình biên dịch sẽ không biên dịch mã không có vòng đeo tay của tôi và IDE không hiểu nó

Bạn hiểu lầm, các dấu ngoặc nhọn sẽ vẫn ở đó, công cụ giả định mà bạn có thể viết sẽ chỉ ẩn chúng trong IDE

Tại sao Python không có dấu ngoặc nhọn?

Một trong những điểm khác biệt lớn nhất giữa Python và các ngôn ngữ lập trình phổ biến khác là trong Python, dấu ngoặc nhọn không được sử dụng để tạo khối chương trình cho điều khiển luồng. In Python, indentation is used for flow control, which makes Python much easier to read than most other programming languages.

Python có theo dấu thụt đầu dòng thay vì dấu ngoặc không?

Python nổi tiếng trong số các ngôn ngữ lập trình vì cú pháp khá độc đáo của nó. thay vì được phân tách bằng dấu ngoặc nhọn hoặc từ khóa “bắt đầu/kết thúc”, các khối được phân cách bằng dấu thụt đầu dòng .

TẠI SAO thụt lề lại quan trọng trong Python?

Việc thụt đầu dòng này giúp họ hiểu thứ tự thực hiện từng khối/câu lệnh. Tương tự, thụt đầu dòng trong Python là một cách để nói với trình thông dịch Python rằng một loạt các câu lệnh thuộc về một khối mã cụ thể