[フレーム]
BT

InfoQ Software Architects' Newsletter

A monthly overview of things you need to know as an architect or aspiring architect.

View an example

We protect your privacy.

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Unlock the full InfoQ experience

Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.

Log In
or

Don't have an InfoQ account?

Register
  • Stay updated on topics and peers that matter to youReceive instant alerts on the latest insights and trends.
  • Quickly access free resources for continuous learningMinibooks, videos with transcripts, and training materials.
  • Save articles and read at anytimeBookmark articles to read whenever youre ready.

Topics

Choose your language

InfoQ Homepage News Advanced Pattern Matching Features Removed From C# 7

Advanced Pattern Matching Features Removed From C# 7

May 13, 2016 2 min read

Write for InfoQ

Feed your curiosity. Help 550k+ global
senior developers
each month stay ahead.
Get in touch

Advanced pattern matching features that were originally expected to be present in C# 7 have been recently excluded from the future branch and will not make it into the next version of the language.

The change of scope for C# 7 pattern matching has already materialized in Roslyn’s GitHub repo. In particular, issue #10866 ("Split the features/patterns branch into two branches for subfeatures in/out C# 7") and PR #10888 ("Remove evidence of advanced pattern-matching features for C# 7") thoroughly describe what this change is about.

As InfoQ reported a few weeks ago, pattern matching was going to be one the most appealing new features in C# 7, especially for programmers coming from a F# or Haskell background. Specifically, new pattern matching features were expected to:

  • enhance case blocks by allowing for switching based on the type or range of a variable, e.g. case int x: or case int x when x > 0;
  • add support for destructuring, which would allow developers to kind of tear apart an object into some of its components, when it met given conditions, while also creating local variables to refer to those components. An example of this is provided by the syntax if (person is Professor {Subject is var s, FirstName is "Scott"}).

Now, according to Roslyn issue #10866, both the syntax expression is Type identifier and case Pattern when expression for a few basic pattern forms have been moved to the future branch for inclusion in C# 7. On the contrary, the remaining features have been left in the patterns/features branch, which hosts features "that might be delivered in a later release".

This means that the more advanced kinds of pattern matching, explained effectively by reddit poster wreckedadvent, will not be available in C# 7, including:

  • recursive pattern forms such as positional patterns (e.g., p is Person("Mickey", *), property patterns (e.g., p is Person {FirstName is "Mickey"}), tuple patterns, wildcard *, etc.
  • the let keyword, supplying immutable vars (e.g., let x = e2 when e2 else stmt;), as opposed to mutable var;
  • the match expression which would allow to write:
 var result = ...
 let message = result match (
 case Success<string> success: success.Result
 case Failure err: err.Message
 case *: "Unknown!"
 );
  • pattern-matching based on user-defined code, such as an user-defined is operator.

There have been a few reactions within the community of C# developers. On the one hand, those more keen on functional programming have expressed their relative deception at the lack of a feature that would have made C# more functional. Other developers, on the contrary, have said themselves not concerned or glad that C# evolution is being managed in a disciplined and controlled way.

Rate this Article

Adoption
Style

This content is in the .NET topic

Related Topics:

Related Content

The InfoQ Newsletter

A round-up of last week’s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers. View an example

We protect your privacy.

BT

AltStyle によって変換されたページ (->オリジナル) /