Tổng quan Microsoft Power Fx

Power Fx là ngôn ngữ ít dùng mã sẽ được sử dụng trên Microsoft Power Platform. Đó là một ngôn ngữ lập trình đa dụng, kiểu mạnh, khai báo và chức năng.

Power Fx được thể hiện bằng văn bản thân thiện với con người. Đó là một ngôn ngữ ít dùng mã mà các nhà sản xuất có thể làm việc trực tiếp trong thanh công thức giống như Excel hoặc cửa sổ văn bản Visual Studio Code. "Ít dùng mã" là do do tính chất ngắn gọn và đơn giản của ngôn ngữ này, làm cho các nhiệm vụ lập trình thông thường trở nên dễ dàng cho cả nhà sản xuất và nhà phát triển. Nó cho phép toàn bộ phạm vi phát triển từ "không cần mã" cho những người chưa bao giờ lập trình trước đây đến "mã dành cho chuyên gia" cho các chuyên gia dày dạn kinh nghiệm, mà không cần học hoặc viết lại các mã phức tạp ở giữa, cho phép các nhóm khác nhau cộng tác và tiết kiệm thời gian và chi phí.

Lưu ý

  • Microsoft Power Fx là tên mới của ngôn ngữ công thức cho ứng dụng canvas trong Power Apps. Phần tổng quan này và các bài viết liên quan đang được thực hiện khi chúng tôi trích xuất ngôn ngữ từ các ứng dụng canvas, tích hợp ngôn ngữ đó với các sản phẩm Microsoft Power Platform và cung cấp nó dưới dạng mã nguồn mở. Để tìm hiểu thêm và trải nghiệm ngôn ngữ này ngay hôm nay, hãy bắt đầu với Bắt đầu với các công thức trong ứng dụng canvas trong hướng dẫn sử dụng Power Apps và đăng ký miễn phí Bản dùng thử Power Apps.
  • Trong bài viết này, chúng tôi đề cập đến người tạo khi chúng tôi mô tả một tính năng có thể được sử dụng ở một trong hai phần cuối của phổ kỹ năng lập trình. Chúng tôi gọi người dùng là người phát triển nếu tính năng này nâng cao hơn và có khả năng nằm ngoài phạm vi của người dùng Excel thông thường.

Power Fx liên kết các đối tượng với nhau bằng các công thức giống như bảng tính khai báo. Ví dụ, hãy nghĩ về thuộc tính Hiển thị của điều khiển giao diện người dùng dưới dạng một ô trong trang tính Excel, với một công thức được liên kết tính toán giá trị của nó dựa trên các thuộc tính của các điều khiển khác. Logic công thức sẽ tự động tính toán lại giá trị, tương tự như cách một bảng tính thực hiện, điều này ảnh hưởng đến khả năng hiển thị của điều khiển.

Ngoài ra, Power Fx cung cấp logic mệnh lệnh khi cần thiết. Trang tính thường không có các nút có thể gửi thay đổi đến cơ sở dữ liệu, nhưng các ứng dụng thường có. Ngôn ngữ biểu thức giống nhau được sử dụng cho cả logic khai báo và mệnh lệnh.

Power Fx sẽ được cung cấp dưới dạng phần mềm nguồn mở. Power Fx hiện được tích hợp vào ứng dụng canvas và chúng tôi đang trong quá trình giải nén Power Fx từ Power Apps để sử dụng trong các sản phẩm Microsoft Power Platform khác và dưới dạng mã nguồn mở. Thông tin thêm: Microsoft Power Fx trên GitHub

Bài viết này là tổng quan về ngôn ngữ và các nguyên tắc thiết kế của Power Fx. Để tìm hiểu thêm về Power Fx, hãy xem các bài viết sau:

Suy nghĩ về bảng tính

Điều gì sẽ xảy ra nếu bạn có thể tạo một ứng dụng dễ dàng như tạo một trang tính trong Excel?

Điều gì sẽ xảy ra nếu bạn có thể tận dụng kiến thức mình có về bảng tính?

Đây là những câu hỏi đã truyền cảm hứng cho việc tạo ra Power Apps và Power Fx. Có hàng trăm triệu người tạo trang tính bằng Excel mỗi ngày. Hãy mang đến cho họ tính năng tạo ứng dụng dễ dàng và sử dụng các khái niệm trong Excel mà họ đã biết. Bằng cách tách Power Fx ra khỏi Power Apps, chúng ta sẽ trả lời những câu hỏi về xây dựng động hóa hoặc tổng đài viên ảo hoặc các miền khác.

Tất cả các ngôn ngữ lập trình, bao gồm cả Power Fx, đều có biểu thức: một cách để biểu diễn một phép tính trên số, chuỗi hoặc các kiểu dữ liệu khác. Ví dụ: mass * acceleration trong hầu hết các ngôn ngữ thể hiện sự nhân lên của massacceleration. Kết quả của một biểu thức có thể được đặt trong một biến, được sử dụng làm đối số cho một quy trình hoặc được lồng trong một biểu thức lớn hơn.

Power Fx thực hiên thêm một bước nữa. Bản thân một biểu thức sẽ không thể hiện được phép tính của nó. Việc đặt biểu thức vào một biến hay chuyển nó vào một hàm là tùy thuộc vào người tạo. Trong Power Fx, thay vì chỉ viết một biểu thức không có ý nghĩa cụ thể, bạn viết công thức liên kết biểu thức với một số nhận dạng. Bạn viết force = mass * acceleration như một công thức để tính toán force. Khi mass hoặc acceleration thay đổi, force được tự động cập nhật thành giá trị mới. Biểu thức mô tả một phép tính, một công thức đặt tên cho phép tính đó và sử dụng nó như một công thức. Đây là lý do tại sao chúng tôi gọi Power Fx như một ngôn ngữ công thức.

Ví dụ: công thức này từ Stack Overflow tìm kiếm một chuỗi theo thứ tự ngược lại. Trong Excel, nó trông giống như hình sau.

Đảo ngược tìm kiếm

Ảnh chụp màn hình thanh công thức trong Excel với công thức: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) Ô A1 chứa văn bản "Hello, World! It is great to meet you!" Ô A2 chứa văn bản "you!"

Power Fx hoạt động với cùng một công thức này, với các tham chiếu ô được thay thế bằng các tham chiếu thuộc tính điều khiển:

Power Fx Tìm kiếm ngược.

Ảnh chụp màn hình thanh công thức Power Fx trong Power Apps. Công thức là =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) Trong hộp Nhập bên dưới công thức, văn bản "Hello, World! It is great to meet you!" xuất hiện, từng chữ một. Đồng thời trong hộp Nhãn, các chữ cái của từ cuối cùng xuất hiện. Khi toàn bộ văn bản xuất hiện trong hộp Nhập, từ "you!" xuất hiện trong hộp Nhãn.

Khi giá trị điều khiển Input thay đổi, điều khiển Label tự động tính toán lại công thức và hiển thị giá trị mới. Không có quy trình xử lý sự kiện OnChange ở đây như phổ biến ở các ngôn ngữ khác.

Một ví dụ khác sử dụng công thức cho màu sắc của màn hình Fill. Khi các thanh trượt điều khiển Đỏ, Xanh lục và Xanh lam được thay đổi, màu nền sẽ tự động thay đổi do được tính toán lại.

Thanh trượt màu.

Không có sự kiện OnChange cho các điều khiển thanh trượt như thường thấy ở các ngôn ngữ khác. Không có cách nào để đặt giá trị thuộc tính Fill. Nếu màu không hoạt động như mong đợi, bạn cần xem công thức này để hiểu tại sao lại như vậy. Bạn không cần phải tìm kiếm toàn bộ ứng dụng để tìm một đoạn mã đặt thuộc tính vào thời điểm không mong muốn; không có yếu tố thời gian nào cả. Các giá trị công thức chính xác luôn được duy trì.

Khi các thanh trượt được đặt thành màu tối, các nhãn cho Đỏ, Xanh lục và Xanh lam sẽ thay đổi thành màu trắng để bù đắp. Điều này được thực hiện thông qua một công thức đơn giản trên thuộc tính Color cho mỗi điều khiển nhãn.

Power Fx thanh trượt màu.

Điều tuyệt vời là nó bị cô lập khỏi những gì đang xảy ra cho màu Fill: đây là hai phép tính hoàn toàn khác nhau. Thay vì các quy trình một khối lớn, logic Power Fx thường được tạo thành từ rất nhiều công thức độc lập, nhỏ hơn. Điều này làm cho chúng dễ hiểu hơn và cho phép cải tiến mà không làm ảnh hưởng đến logic hiện có.

Power Fx là một ngôn ngữ khai báo, giống như Excel. Người tạo xác định hành vi nào họ muốn, nhưng hệ thống xác định và tối ưu hóa cách thức và thời điểm thực hiện nó. Để làm cho điều đó trở nên thực tế, hầu hết công việc được thực hiện thông qua các hàm thuần túy mà không có tác dụng phụ, làm cho Power Fx cũng trở thành một ngôn ngữ hàm (một lần nữa giống như Excel).

Luôn khả dụng

Một khía cạnh xác định của trang tính là chúng luôn hoạt động và các thay đổi được phản ánh ngay lập tức. Không có chế độ biên dịch hoặc chạy trong trang tính. Khi một công thức được sửa đổi hoặc một giá trị được nhập vào, hệ thống sẽ tính toán trang tính ngay lập tức để phản ánh những thay đổi này. Bất kỳ lỗi nào được phát hiện sẽ hiển thị ngay lập tức và không ảnh hưởng đến phần còn lại của trang tính.

Điều tương tự cũng được thực hiện với Power Fx. Một trình biên dịch gia tăng được sử dụng để giữ cho chương trình luôn đồng bộ với dữ liệu mà chương trình đang hoạt động. Các thay đổi được tự động truyền qua biểu đồ của chương trình, ảnh hưởng đến kết quả của các phép tính phụ thuộc. Điều này có thể thúc đẩy thuộc tính trên các tùy chọn điều khiển như màu sắc hoặc vị trí. Trình biên dịch gia tăng cũng cung cấp trải nghiệm chỉnh sửa công thức phong phú với IntelliSense, đề xuất, tự động hoàn thành và kiểm tra kiểu.

Trong hình ảnh động bên dưới, số thứ tự được hiển thị trong điều khiển nhãn phụ thuộc vào điều khiển thanh trượt, mặc dù có hai lỗi trên các nhãn bên dưới nó. Ứng dụng rất sống động và tương tác. Thao tác đầu tiên nhằm sửa công thức bằng cách nhập .InvalidName khiến một dòng màu đỏ và lỗi hiển thị, nhưng ứng dụng vẫn tiếp tục chạy.

Luôn sống.

Khi .Employee được nhập, điều này khiến ngăn Data thêm bảng Nhân viên, siêu dữ liệu cho bảng này được truy xuất và các gợi ý về cột ngay lập tức được đưa ra. Chúng tôi vừa xem xét mối quan hệ từ bảng này sang bảng khác và hệ thống đã thực hiện các điều chỉnh cần thiết đối với các tham chiếu của ứng dụng. Điều tương tự cũng xảy ra khi thêm .Customer.

Sau mỗi thay đổi, thanh trượt tiếp tục với giá trị cuối cùng của nó và bất kỳ biến nào vẫn giữ nguyên giá trị của chúng. Trong suốt thời gian đó, số thứ tự đã tiếp tục được hiển thị trong nhãn trên cùng. Ứng dụng đã hoạt động, xử lý dữ liệu thực trong toàn bộ thời gian. Chúng ta có thể lưu lại, rời đi và những người khác có thể mở và sử dụng giống như Excel. Không có bước tạo, không có bước biên soạn, chỉ có bước phát hành để xác định phiên bản ứng dụng nào đã sẵn sàng cho người dùng.

Mã thấp

Power Fx mô tả logic nghiệp vụ trong các công thức ngắn gọn nhưng mạnh mẽ. Hầu hết logic có thể được rút gọn thành một dòng, với nhiều biểu cảm và khả năng kiểm soát cho các nhu cầu phức tạp hơn. Mục đích là giữ cho số lượng khái niệm mà nhà sản xuất cần hiểu ở mức tối thiểu, lý tưởng là không nhiều hơn một người dùng Excel đã biết.

Ví dụ: để tra cứu tên của một nhân viên cho một đơn hàng, bạn cần viết Power Fx như trong hình ảnh động sau. Ngoài các khái niệm Excel, khái niệm bổ sung duy nhất được sử dụng ở đây là ký hiệu dấu chấm "." để đi sâu vào cấu trúc dữ liệu, trong trường hợp này .Employee.'First Name'. Hoạt ảnh hiển thị ánh xạ giữa các phần của công thức Power Fx và các khái niệm cần được mã hóa rõ ràng trong JavaScript tương đương.

JavaScript mã thấp.

Hãy cùng tìm hiểu sâu hơn về tất cả những việc mà Power Fx đang làm cho chúng ta và sự tự do mà nó có để tối ưu hóa vì công thức này mang tính khai báo:

  • Không đồng thời: Tất cả các hoạt động dữ liệu trong Power Fx là không đồng thời. Người tạo không cần chỉ định điều này, cũng không cần đồng bộ hóa các hoạt động sau khi lệnh gọi kết thúc. Người tạo không cần phải biết gì về khái niệm này, cũng không cần biết hàm promise hay hàm lambda là gì.

  • Cục bộ và từ xa: Power Fx sử dụng cùng một cú pháp và chức năng cho dữ liệu nằm trong bộ nhớ cục bộ và kết nối từ xa trong cơ sở dữ liệu hoặc dịch vụ. Người dùng không cần phải suy nghĩ về sự phân biệt này. Power Fx tự động ủy quyền những gì nó có thể thực hiện cho máy chủ, để xử lý các bộ lọc và sắp xếp hiệu quả hơn ở đó.

  • Dữ liệu quan hệ : Đơn hàng và Khách hàng là hai bảng khác nhau, có mối quan hệ nhiều-một. Truy vấn OData yêu cầu một "$expand" với kiến thức về khóa ngoại, tương tự như Tham gia trong SQL. Trên thực tế, công thức không có điều này. Các khóa cơ sở dữ liệu là một khái niệm khác mà người tạo không cần biết. Nhà sản xuất có thể sử dụng ký hiệu dấu chấm đơn giản để truy cập toàn bộ biểu đồ của các mối quan hệ từ một bản ghi.

  • Phép chiếu: Khi viết một truy vấn, nhiều nhà phát triển viết select * from table để trả về tất cả các cột dữ liệu. Power Fx phân tích tất cả các cột được sử dụng thông qua toàn bộ ứng dụng, thậm chí trên các đối tượng phụ thuộc công thức. Phép chiếu được tự động tối ưu hóa và một lần nữa, người tạo không cần biết "phép chiếu" nghĩa là gì.

  • Chỉ lấy những gì cần thiết: Trong ví dụ này, hàm LookUp ngụ ý rằng chỉ một bản ghi nên được truy xuất và đó là tất cả những gì được trả về. Nếu nhiều bản ghi được yêu cầu bằng cách sử dụng hàm Filter, mà nhờ đó hàng nghìn bản ghi có thể đủ điều kiện, thì mỗi lần chỉ có một trang dữ liệu được trả về, theo thứ tự 100 bản ghi trên mỗi trang. Người dùng phải di chuyển qua thư viện hoặc bảng dữ liệu để xem thêm dữ liệu và hệ thống sẽ tự động hiển thị cho họ. Người tạo có thể suy luận về các tập dữ liệu lớn mà không cần phải suy nghĩ về việc giới hạn các yêu cầu dữ liệu ở những phần có thể quản lý được.

  • Chỉ chạy khi cần thiết: Chúng tôi đã xác định được một công thức cho thuộc tính Text của tùy chọn kiểm soát nhãn. Khi biến đã chọn thay đổi, LookUp được tự động tính toán lại và nhãn được cập nhật. Người tạo không cần phải viết trình xử lý OnChange cho phần Lựa chọn và không cần nhớ rằng nhãn này phụ thuộc vào đó. Như đã thảo luận trước đó, đây là chương trình khai báo: người tạo chỉ định những gì họ muốn có trong nhãn, chứ không phải cách thức hay thời điểm tìm nạp nhãn. Nếu nhãn này không xuất hiện do đang ở trên một màn hình không hiển thị hoặc nếu thuộc tính Visible sai, chúng tôi có thể tạm hoãn phép tính này cho đến khi nhãn hiển thị và loại bỏ nhãn đó một cách hiệu quả nếu điều đó hiếm khi xảy ra.

  • Dịch cú pháp Excel: Excel được sử dụng bởi nhiều người dùng, hầu hết trong số họ biết rằng dấu và (&) được sử dụng để nối chuỗi. JavaScript sử dụng dấu cộng (+) và các ngôn ngữ khác dùng dấu chấm (.).

  • Hiển thị tên và bản địa hóa: First Name được sử dụng trong công thức Power Fx trong khi nwind_firstname được sử dụng trong JavaScript tương đương. Trong Microsoft Dataverse và SharePoint, ngoài tên logic duy nhất ra thì còn có tên hiển thị cho các cột và các bảng. Tên hiển thị thường thân thuộc với người dùng hơn nhiều, như trong trường hợp này, nhưng chúng cũng có đặc điểm quan trọng khác là có thể chuyển ngữ được. Nếu đội ngũ của bạn sử dụng nhiều ngôn ngữ thì từng thành viên trong đội có thể xem tên bảng và trường thông tin bằng ngôn ngữ họ thường dùng. Trong tất cả các trường hợp sử dụng, Power Fx đảm bảo tên logic chính xác sẽ tự động được gửi đến cơ sở dữ liệu.

Không có mã

Bạn không cần phải đọc và viết Power Fx để bắt đầu trình bày logic. Có rất nhiều tùy chỉnh và logic có thể được thể hiện thông qua các công tắc đơn giản và trình tạo giao diện người dùng. Các công cụ không dùng mã này đã được xây dựng để đọc và viết Power Fx nhằm đảm bảo mang lại nhiều khoảng trống tiếp cận hơn nữa cho ai đó, đồng thời xác nhận rằng các công cụ không dùng mã sẽ không bao giờ biểu đạt toàn bộ ngôn ngữ. Ngay cả khi được sử dụng với trình tạo không dùng mã, thanh công thức vẫn chiếm vị trí chủ đạo trong Power Apps để hướng dẫn người tạo về những gì hệ thống đang thay họ thực hiện để người tạo có thể bắt đầu tìm hiểu về Power Fx.

Hãy cùng xem xét một số ví dụ nhé. Trong Power Apps, bảng thuộc tính cung cấp các nút và công tắc "không dùng mã" cho các thuộc tính của tùy chọn điều khiển. Trên thực tế, hầu hết các giá trị thuộc tính đều ở dạng tĩnh. Bạn có thể sử dụng trình tạo màu để thay đổi màu nền của Gallery. Lưu ý rằng thanh công thức phản ánh sự thay đổi này, sau đó cập nhật công thức thành một lệnh gọi RGBA khác. Bất cứ lúc nào, bạn có thể đi tới thanh công thức và thực hiện thêm một bước nữa, trong ví dụ này thì cách làm sẽ là dùng ColorFade để điều chỉnh màu sắc. Thuộc tính màu vẫn xuất hiện trong bảng thuộc tính, nhưng biểu tượng fx sẽ xuất hiện khi bạn di chuột và được chuyển hướng đến thanh công thức. Quá trình này hoạt động đầy đủ theo 2 cách: bỏ lệnh gọi ColorFade biến màu này thành thứ gì đó mà bảng thuộc tính có thể hiểu được và bạn có thể dùng lại lệnh này để đặt màu.

Màu không mã.

Sau đây là ví dụ phức tạp hơn. Thư viện hiển thị danh sách nhân viên từ Dataverse. Dataverse cung cấp các dạng xem trên dữ liệu bảng. Chúng tôi có thể chọn một trong các chế độ xem này và công thức được thay đổi để sử dụng hàm Filter theo tên chế độ xem này. Hai menu thả xuống có thể được sử dụng để quay số trong bảng và chế độ xem chính xác mà không cần chạm vào thanh công thức. Nhưng giả sử bạn muốn thực hiện nhiều hơn và thêm một lượt sắp xếp. Chúng ta có thể làm điều đó trong thanh công thức và bảng thuộc tính sẽ lại hiển thị biểu tượng fx và chuyển các phần sửa đổi vào thanh công thức. Và một lần nữa, nếu chúng ta đơn giản hóa công thức thành một thứ gì đó mà bảng thuộc tính có thể đọc và ghi, thì nó có thể được sử dụng một lần nữa.

Sắp xếp không mã.

Đây là những ví dụ đơn giản. Chúng tôi tin rằng Power Fx tạo ra một ngôn ngữ tuyệt vời để mô tả các tương tác không dùng mã. Power Fx ngắn gọn, hiệu quả và dễ phân tích cú pháp, đồng thời cung cấp khoảng trống thường cần thiết với từ lựa chọn "không có mã phức tạp" cho đến ít dùng mã.

Mã dành cho chuyên gia

Đôi khi, người tạo ít dùng mã tạo ra những nội dung cần đến sự trợ giúp của chuyên gia hoặc phải có nhà phát triển chuyên nghiệp tiếp quản để duy trì và thúc đẩy. Các chuyên gia cũng đánh giá cao rằng việc phát triển mã thấp có thể dễ dàng hơn, nhanh hơn và ít tốn kém hơn so với việc xây dựng một công cụ chuyên nghiệp. Không phải mọi tình huống đều yêu cầu toàn bộ sức mạnh của Visual Studio.

Các chuyên gia muốn sử dụng các công cụ chuyên nghiệp để có năng suất cao nhất. Công thức Power Fx có thể được lưu trữ trong tệp nguồn YAML, dễ dàng chỉnh sửa bằng Visual Studio Code, Visual Studio hoặc bất công cụ chỉnh sửa văn bản nào khác, đồng thời có thể đặt Power Fx vào tùy chọn kiểm soát nguồn bằng GitHub, Azure DevOps hay bất kỳ hệ thống kiểm soát mã nguồn nào khác.

 Visual Studio Mã Pro.

Mã chuyên nghiệp GitHub.

Power Fx hỗ trợ các thành phần dựa trên công thức để chia sẻ và sử dụng lại. Chúng tôi đã công bố hỗ trợ các tham số cho thuộc tính thành phần, cho phép tạo các hàm thuần túy do người dùng xác định với nhiều cải tiến hơn đang được thực hiện.

Ngoài ra, Power Fx rất tuyệt vời trong việc kết hợp các thành phần và dịch vụ được xây dựng bởi các chuyên gia. Các trình kết nối sáng tạo cung cấp quyền truy cập vào hàng trăm nguồn dữ liệu và dịch vụ web, trình kết nối tùy chỉnh cho phép Power Fx kết nối với bất kỳ dịch vụ web REST nào và các thành phần mã cho phép Power Fx tương tác với JavaScript tùy chỉnh hoàn toàn trên màn hình và trang.

Nguyên tắc thiết kế

Đơn giản

Power Fx được thiết kế để nhắm mục tiêu đến đối tượng người tạo mà thành viên của họ chưa được đào tạo để trở thành nhà phát triển. Bất cứ khi nào có thể, chúng tôi sử dụng kiến thức mà đối tượng này đã biết hoặc có thể tiếp thu nhanh chóng. Số lượng khái niệm cần thiết để thành công được giữ ở mức tối thiểu.

Đơn giản cũng tốt cho các nhà phát triển. Đối với đối tượng nhà phát triển, chúng tôi hướng đến việc trở thành một ngôn ngữ mã thấp giúp cắt giảm thời gian cần thiết để xây dựng giải pháp.

Mức nhất quán Excel

Ngôn ngữ Microsoft Power Fx vay mượn rất nhiều từ ngôn ngữ công thức của Excel. Chúng tôi cố gắng tận dụng kiến thức và kinh nghiệm về Excel từ nhiều người tạo cũng sử dụng Excel. Các kiểu, toán tử và ngữ nghĩa hàm càng giống với Excel càng tốt.

Nếu không tìm thấy câu trả lời ở Excel, chúng tôi sẽ chuyển sang tìm kiếm trên SQL. Sau Excel, SQL là ngôn ngữ khai báo tiếp theo được sử dụng phổ biến nhất và có thể cung cấp hướng dẫn về các thao tác dữ liệu cùng cách gõ mạnh mà Excel không có.

Khai báo

Người tạo mô tả những gì họ muốn thực hiện theo logic, chứ không phải cách thức hay thời điểm chính xác để làm việc đó. Nhờ đó, công cụ biên soạn có thể tối ưu hóa bằng cách thực hiện song song các thao tác, trì hoãn công việc cho đến khi cần thiết, cũng như tìm nạp trước và tái sử dụng dữ liệu đã lưu trong bộ nhớ cache.

Ví dụ: Trong một trang tính Excel, tác giả xác định mối quan hệ giữa các ô, nhưng Excel sẽ quyết định thời điểm và thứ tự đánh giá các công thức. Tương tự, các công thức trong một ứng dụng có thể được coi là "đang tính toán lại" khi cần thiết, tùy theo hành động của người dùng, các thay đổi về cơ sở dữ liệu hoặc sự kiện hẹn giờ.

Chức năng

Chúng tôi ủng hộ các hàm thuần túy không kèm theo hiệu ứng phụ. Điều này dẫn đến logic dễ hiểu hơn và cung cấp cho công cụ biên soạn mức độ tự do lớn nhất để tối ưu hóa.

Không giống như Excel, xét về bản chất, các ứng dụng có trạng thái thay đổi, ví dụ: ứng dụng có nút lưu các thay đổi vào bản ghi trong cơ sở dữ liệu. Do đó, một số hàm có tác dụng phụ, mặc dù chúng tôi hạn chế điều này nhiều nhất có thể.

Tổng hợp

Nếu có thể, chức năng được thêm vào sẽ hoạt động tốt với chức năng hiện có. Các chức năng mạnh mẽ có thể được phân tách thành các phần nhỏ hơn để có thể dễ dàng sử dụng độc lập hơn.

Ví dụ: tùy chọn kiểm soát Bộ sưu tập không có các thuộc tính SortFilter riêng. Thay vào đó, các hàm SortFilter được kết hợp với nhau thành một thuộc tính Items. Giao diện người dùng để thể hiện hành vi SortFilter được xếp lớp ở đầu thuộc tính Items, bằng cách dùng công cụ chỉnh sửa hai chiều cho thuộc tính này.

Được nhập mạnh mẽ

Các loại của tất cả các giá trị đã biết tại thời điểm biên dịch. Điều này cho phép phát hiện sớm các lỗi và đề xuất phong phú trong khi tạo.

Các kiểu đa hình được hỗ trợ, nhưng trước khi sử dụng thì phải được ghim vào kiểu tĩnh và phải được biết đến tại thời điểm biên soạn. Các hàm IsTypeAsType được cung cấp cho các loại thử nghiệm và truyền.

Suy luận loại

Các loại có nguồn gốc từ việc sử dụng chúng mà không được khai báo. Ví dụ: đặt biến cho một số kết quả trong loại của biến đang được thiết lập dưới dạng số.

Việc sử dụng kiểu xung đột dẫn đến lỗi thời gian biên dịch.

Dấu phân tách thập phân nhạy cảm với ngôn ngữ

Một số khu vực trên thế giới sử dụng dấu chấm (.) làm dấu phân tách thập phân, trong khi những nơi khác sử dụng dấu phẩy (,). Điều này cũng tương tự trên Excel. Điều này thường không được thực hiện trong các ngôn ngữ lập trình khác bởi những ngôn ngữ lập trình khác đó thường dùng dấu chấm chính tắc (.) làm dấu phân tách thập phân cho tất cả người dùng trên toàn thế giới. Để người tạo ở mọi cấp độ dễ tiếp cận nhất có thể, điều quan trọng là 3,14 là một số thập phân cho một người ở Pháp đã sử dụng cú pháp đó cả đời.

Việc lựa chọn dấu phân tách thập phân có tác động theo tầng đối với dấu phân tách danh sách, được sử dụng cho các đối số gọi hàm và toán tử chuỗi.

Dấu phân tách trong ngôn ngữ của tác giả Dấu phân tách thập phân trong Power Fx Dấu phân tách danh sách trong Power Fx Toán tử tạo chuỗi trong Power Fx
. (dấu chấm) . (dấu chấm) , (dấu phẩy) ; (dấu chấm phẩy)
, (dấu phẩy) , (dấu phẩy) ; (dấu chấm phẩy) ;; (hai dấu chấm phẩy)

Thông tin thêm: Hỗ trợ toàn cầu

Không hướng đến đối tượng

Cả Excel và Power Fx đều không hướng đến đối tượng. Ví dụ: trong một số ngôn ngữ, độ dài của một chuỗi được biểu thị dưới dạng một thuộc tính của chuỗi, chẳng hạn như "Hello World".length trong JavaScript. Thay vào đó, Excel và Power Fx thể hiện điều này dưới dạng một hàm, như Len( "Hello World" ).

Các thành phần có thuộc tính và phương thức là hướng đối tượng và Power Fx dễ dàng làm việc với chúng. Nhưng nếu có thể, chúng tôi thích cách tiếp cận theo hàm hơn.

Có thể mở rộng

Người tạo có thể tạo ra các thành phần và hàm của họ bằng cách sử dụng chính Power Fx. Các nhà phát triển có thể tạo các thành phần và chức năng của họ bằng cách viết JavaScript.

Thân thiện với nhà phát triển

Mặc dù các nhà sản xuất là mục tiêu chính của chúng tôi, nhưng chúng tôi cố gắng thân thiện với nhà phát triển bất cứ khi nào có thể. Nếu việc này không mâu thuẫn với các nguyên tắc thiết kế được mô tả trước đó, chúng tôi sẽ hành động theo cách mà nhà phát triển sẽ đánh giá cao. Ví dụ: Excel không có khả năng thêm nhận xét, vì vậy chúng tôi sử dụng dòng giống chữ C và nhận xét nội dòng.

Cách mạng ngôn ngữ

Việc phát triển các ngôn ngữ lập trình vừa cần thiết vừa thách thức. Tất cả mọi người, ở mức độ phù hợp, lo ngại rằng một thay đổi, bất kể có mục đích tốt như thế nào, có thể phá vỡ mã hiện có và buộc người dùng phải học một mẫu mới. Power Fx rất coi trọng khả năng tương thích ngược, nhưng chúng tôi cũng tin tưởng mạnh mẽ rằng không phải lúc nào mình cũng làm đúng ngay lần đầu và chúng tôi sẽ cùng nhau tìm hiểu những gì tốt nhất với vai trò là một cộng đồng. Chúng tôi phải phát triển và Power Fx được thiết kế để hỗ trợ cho sự phát triển ngôn ngữ ngay từ ban đầu.

Dấu phiên bản ngôn ngữ có trong mọi tài liệu Power Fx được lưu. Nếu muốn thực hiện một thay đổi không tương thích, chúng tôi sẽ viết thứ mà chúng tôi gọi là "công cụ chuyển đổi tương thích ngược" để tự động viết lại công thức trong lần chỉnh sửa tiếp theo. Nếu sự thay đổi là điều quan trọng mà chúng tôi cần hướng dẫn người dùng thì chúng tôi cũng sẽ hiển thị thông báo kèm theo liên kết để mở tài liệu. Nhờ cơ sở này, chúng tôi vẫn có thể tải ứng dụng mà mình đã phát triển với các bản xem trước của Power Apps từ nhiều năm trước, bất kể đã xảy ra những thay đổi gì từ đó đến nay.

Ví dụ: chúng tôi đã giới thiệu hàm ShowError để hiển thị một biểu ngữ lỗi với nền màu đỏ.

Hiển thị lỗi.

Người dùng yêu thích nó, nhưng họ cũng yêu cầu chúng tôi cung cấp cách hiển thị biểu ngữ thành công (nền xanh lá cây) hoặc biểu ngữ thông tin (nền xanh lam). Vì vậy, chúng tôi đã đưa ra một hàm Notify nhận đối số thứ hai cho loại thông báo này. Chúng tôi có thể chỉ cần thêm Notify và giữ ShowError theo cách vốn có, nhưng thay vào đó, chúng tôi đã thay thế ShowError với Notify. Chúng tôi đã xóa một hàm được tạo trước đó và thay bằng hàm khác. Bởi vì sẽ có hai cách để làm điều tương tự nên việc này sẽ gây ra sự nhầm lẫn, đặc biệt là cho người dùng mới, và quan trọng nhất là mọi thứ sẽ càng phức tạp hơn. Không ai phàn nàn, tất cả mọi người đều trân trọng sự thay đổi này rồi sau đó chuyển sang tính năng Thông báo tiếp theo.

Đây là giao diện của cùng một ứng dụng khi được tải vào phiên bản mới nhất của Power Apps. Người dùng không cần thực hiện hành động nào để thực hiện việc chuyển đổi này. Việc chuyển đổi sẽ tự động diễn ra khi người dùng mở ứng dụng.

Chức năng Thông báo thay thế ShowError.

Với cơ sở này, Power Fx có thể phát triển nhanh hơn và mạnh mẽ hơn hầu hết các ngôn ngữ lập trình.

Không có giá trị không xác định

Một số ngôn ngữ, chẳng hạn như JavaScript, sử dụng khái niệm của giá trị chưa xác định cho các biến chưa được khởi tạo hoặc các thuộc tính bị thiếu. Để đơn giản, chúng tôi đã tránh khái niệm này. Những phiên bản không xác định được bằng các ngôn ngữ khác sẽ được xem là lỗi hoặc giá trị trống. Ví dụ: tất cả các biến chưa khởi tạo đều bắt đầu bằng giá trị trống. Tất cả các kiểu dữ liệu có thể nhận giá trị trống.

Loại dữ liệu
Toán tử và định danh
Bảng
Biến
Logic mệnh lệnh
Hỗ trợ toàn cầu
Ngữ pháp biểu thức
Ngữ pháp công thức YAML
Công thức trong ứng dụng canvas