Add "???" Unimplemented

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Add "???" Unimplemented

Dante Federici
With the advent of TypeScript, classes, etc one feature I liked from scala is: `???`, the [Predef.???](https://www.scala-lang.org/api/current/scala/NotImplementedError.html) token.

Basically, you can place `???` which would type as whatever the method is typed as (for things like Typescript, Symbol definitions, etc.), and when run, throws the "NotImplementedError".

This is useful when writing libraries or other code -- more readable that "cannot call undefined" when the method is missing, and a nice placeholder for young APIs.

This is basically the same as writing: `throw new Error('Unimplemented')`.

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Add "???" Unimplemented

Naveen Chawla
Can you give a simple example?

On Wed, 21 Mar 2018 at 00:44 dante federici <[hidden email]> wrote:
With the advent of TypeScript, classes, etc one feature I liked from scala is: `???`, the [Predef.???](https://www.scala-lang.org/api/current/scala/NotImplementedError.html) token.

Basically, you can place `???` which would type as whatever the method is typed as (for things like Typescript, Symbol definitions, etc.), and when run, throws the "NotImplementedError".

This is useful when writing libraries or other code -- more readable that "cannot call undefined" when the method is missing, and a nice placeholder for young APIs.

This is basically the same as writing: `throw new Error('Unimplemented')`.
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Add "???" Unimplemented

Augusto Moura
I think it can be easily implemented with decorators (https://github.com/tc39/proposal-decorators).
Something like `@unimplemented`.

In my opinion it doesn't offer enough benefits to be added as a new syntax.

Em qua, 21 de mar de 2018 às 04:02, Naveen Chawla <[hidden email]> escreveu:
Can you give a simple example?

On Wed, 21 Mar 2018 at 00:44 dante federici <[hidden email]> wrote:
With the advent of TypeScript, classes, etc one feature I liked from scala is: `???`, the [Predef.???](https://www.scala-lang.org/api/current/scala/NotImplementedError.html) token.

Basically, you can place `???` which would type as whatever the method is typed as (for things like Typescript, Symbol definitions, etc.), and when run, throws the "NotImplementedError".

This is useful when writing libraries or other code -- more readable that "cannot call undefined" when the method is missing, and a nice placeholder for young APIs.

This is basically the same as writing: `throw new Error('Unimplemented')`.
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
--
Augusto Moura

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

Dante Federici
In reply to this post by Dante Federici
Simple example (ts):
```typescript
interface SearchFunc {
    (source: string, subString: string): boolean;
}

// Later
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {  ??? }
```

Simple example (js):
```js
class MyClass = {
  foo() { return "foo"; }
  bar() { return "bar"; }
}
class ExtendClass extends MyClass {
    foo(){ ??? }
    bar(){ return `extended bar`; }
}

// Elsewhere
myRunner = (classInstance) => `${classInstance.foo()} :: ${classInstance.bar()}`;

myRunner(myClassInstance);
myRunner(extendedClassInstance);
```

Decorations would be good for classes, but don't work for regular methods.

I'm not sold we need new syntax for this -- I just find myself reaching for the `???` symbol. Especially in a typed language or in any instance that we have a class and extended paradigm, or when you have a prescribed "object" shape.

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

Isiah Meadows-2
I would suggest, if you have support in your editor, just making a
`???` snippet expand to `throw new Error("unimplemented")`. I've been
doing similar (mod the snippet) for a while, and it's worked pretty
well.
-----

Isiah Meadows
[hidden email]

Looking for web consulting? Or a new website?
Send me an email and we can get started.
www.isiahmeadows.com


On Fri, Mar 23, 2018 at 11:16 AM, dante federici
<[hidden email]> wrote:

> Simple example (ts):
> ```typescript
> interface SearchFunc {
>     (source: string, subString: string): boolean;
> }
>
> // Later
> let mySearch: SearchFunc;
> mySearch = function(source: string, subString: string) {  ??? }
> ```
>
> Simple example (js):
> ```js
> class MyClass = {
>   foo() { return "foo"; }
>   bar() { return "bar"; }
> }
> class ExtendClass extends MyClass {
>     foo(){ ??? }
>     bar(){ return `extended bar`; }
> }
>
> // Elsewhere
> myRunner = (classInstance) => `${classInstance.foo()} ::
> ${classInstance.bar()}`;
>
> myRunner(myClassInstance);
> myRunner(extendedClassInstance);
> ```
>
> Decorations would be good for classes, but don't work for regular methods.
>
> I'm not sold we need new syntax for this -- I just find myself reaching for
> the `???` symbol. Especially in a typed language or in any instance that we
> have a class and extended paradigm, or when you have a prescribed "object"
> shape.
>
> _______________________________________________
> es-discuss mailing list
> [hidden email]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

Dante Federici
Not a bad idea -- I agree that it really belongs here, but its value is much higher in something like TypeScript, where you can keep the typing signature but have a missing implementation.

On Sat, Mar 24, 2018 at 3:32 AM Isiah Meadows <[hidden email]> wrote:
I would suggest, if you have support in your editor, just making a
`???` snippet expand to `throw new Error("unimplemented")`. I've been
doing similar (mod the snippet) for a while, and it's worked pretty
well.
-----

Isiah Meadows
[hidden email]

Looking for web consulting? Or a new website?
Send me an email and we can get started.
www.isiahmeadows.com


On Fri, Mar 23, 2018 at 11:16 AM, dante federici
<[hidden email]> wrote:
> Simple example (ts):
> ```typescript
> interface SearchFunc {
>     (source: string, subString: string): boolean;
> }
>
> // Later
> let mySearch: SearchFunc;
> mySearch = function(source: string, subString: string) {  ??? }
> ```
>
> Simple example (js):
> ```js
> class MyClass = {
>   foo() { return "foo"; }
>   bar() { return "bar"; }
> }
> class ExtendClass extends MyClass {
>     foo(){ ??? }
>     bar(){ return `extended bar`; }
> }
>
> // Elsewhere
> myRunner = (classInstance) => `${classInstance.foo()} ::
> ${classInstance.bar()}`;
>
> myRunner(myClassInstance);
> myRunner(extendedClassInstance);
> ```
>
> Decorations would be good for classes, but don't work for regular methods.
>
> I'm not sold we need new syntax for this -- I just find myself reaching for
> the `???` symbol. Especially in a typed language or in any instance that we
> have a class and extended paradigm, or when you have a prescribed "object"
> shape.
>
> _______________________________________________
> es-discuss mailing list
> [hidden email]
> https://mail.mozilla.org/listinfo/es-discuss
>

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

Isiah Meadows-2
Even in TypeScript, `never` (the type of functions that never return -
throwing ≠ returning) is the subtype of *all* types, even primitives.
-----

Isiah Meadows
[hidden email]

Looking for web consulting? Or a new website?
Send me an email and we can get started.
www.isiahmeadows.com


On Sun, Mar 25, 2018 at 7:45 PM, dante federici
<[hidden email]> wrote:

> Not a bad idea -- I agree that it really belongs here, but its value is much
> higher in something like TypeScript, where you can keep the typing signature
> but have a missing implementation.
>
>
> On Sat, Mar 24, 2018 at 3:32 AM Isiah Meadows <[hidden email]>
> wrote:
>>
>> I would suggest, if you have support in your editor, just making a
>> `???` snippet expand to `throw new Error("unimplemented")`. I've been
>> doing similar (mod the snippet) for a while, and it's worked pretty
>> well.
>> -----
>>
>> Isiah Meadows
>> [hidden email]
>>
>> Looking for web consulting? Or a new website?
>> Send me an email and we can get started.
>> www.isiahmeadows.com
>>
>>
>> On Fri, Mar 23, 2018 at 11:16 AM, dante federici
>> <[hidden email]> wrote:
>> > Simple example (ts):
>> > ```typescript
>> > interface SearchFunc {
>> >     (source: string, subString: string): boolean;
>> > }
>> >
>> > // Later
>> > let mySearch: SearchFunc;
>> > mySearch = function(source: string, subString: string) {  ??? }
>> > ```
>> >
>> > Simple example (js):
>> > ```js
>> > class MyClass = {
>> >   foo() { return "foo"; }
>> >   bar() { return "bar"; }
>> > }
>> > class ExtendClass extends MyClass {
>> >     foo(){ ??? }
>> >     bar(){ return `extended bar`; }
>> > }
>> >
>> > // Elsewhere
>> > myRunner = (classInstance) => `${classInstance.foo()} ::
>> > ${classInstance.bar()}`;
>> >
>> > myRunner(myClassInstance);
>> > myRunner(extendedClassInstance);
>> > ```
>> >
>> > Decorations would be good for classes, but don't work for regular
>> > methods.
>> >
>> > I'm not sold we need new syntax for this -- I just find myself reaching
>> > for
>> > the `???` symbol. Especially in a typed language or in any instance that
>> > we
>> > have a class and extended paradigm, or when you have a prescribed
>> > "object"
>> > shape.
>> >
>> > _______________________________________________
>> > es-discuss mailing list
>> > [hidden email]
>> > https://mail.mozilla.org/listinfo/es-discuss
>> >
>
>
> _______________________________________________
> es-discuss mailing list
> [hidden email]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

Thomas Grainger
const ɁɁɁ = () => { throw new Error('Method not defined'); };

Thomas Grainger

On 26 March 2018 at 06:26, Isiah Meadows <[hidden email]> wrote:
Even in TypeScript, `never` (the type of functions that never return -
throwing ≠ returning) is the subtype of *all* types, even primitives.
-----

Isiah Meadows
[hidden email]

Looking for web consulting? Or a new website?
Send me an email and we can get started.
www.isiahmeadows.com


On Sun, Mar 25, 2018 at 7:45 PM, dante federici
<[hidden email]> wrote:
> Not a bad idea -- I agree that it really belongs here, but its value is much
> higher in something like TypeScript, where you can keep the typing signature
> but have a missing implementation.
>
>
> On Sat, Mar 24, 2018 at 3:32 AM Isiah Meadows <[hidden email]>
> wrote:
>>
>> I would suggest, if you have support in your editor, just making a
>> `???` snippet expand to `throw new Error("unimplemented")`. I've been
>> doing similar (mod the snippet) for a while, and it's worked pretty
>> well.
>> -----
>>
>> Isiah Meadows
>> [hidden email]
>>
>> Looking for web consulting? Or a new website?
>> Send me an email and we can get started.
>> www.isiahmeadows.com
>>
>>
>> On Fri, Mar 23, 2018 at 11:16 AM, dante federici
>> <[hidden email]> wrote:
>> > Simple example (ts):
>> > ```typescript
>> > interface SearchFunc {
>> >     (source: string, subString: string): boolean;
>> > }
>> >
>> > // Later
>> > let mySearch: SearchFunc;
>> > mySearch = function(source: string, subString: string) {  ??? }
>> > ```
>> >
>> > Simple example (js):
>> > ```js
>> > class MyClass = {
>> >   foo() { return "foo"; }
>> >   bar() { return "bar"; }
>> > }
>> > class ExtendClass extends MyClass {
>> >     foo(){ ??? }
>> >     bar(){ return `extended bar`; }
>> > }
>> >
>> > // Elsewhere
>> > myRunner = (classInstance) => `${classInstance.foo()} ::
>> > ${classInstance.bar()}`;
>> >
>> > myRunner(myClassInstance);
>> > myRunner(extendedClassInstance);
>> > ```
>> >
>> > Decorations would be good for classes, but don't work for regular
>> > methods.
>> >
>> > I'm not sold we need new syntax for this -- I just find myself reaching
>> > for
>> > the `???` symbol. Especially in a typed language or in any instance that
>> > we
>> > have a class and extended paradigm, or when you have a prescribed
>> > "object"
>> > shape.
>> >
>> > _______________________________________________
>> > es-discuss mailing list
>> > [hidden email]
>> > https://mail.mozilla.org/listinfo/es-discuss
>> >
>
>
> _______________________________________________
> es-discuss mailing list
> [hidden email]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss


_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|

Re: Re: Add "???" Unimplemented

T.J. Crowder-2
On Wed, Apr 4, 2018 at 8:11 AM, Thomas Grainger <[hidden email]> wrote:
>
> const ɁɁɁ = () => { throw new Error('Method not defined'); };

LOL. Awkward to type on most keyboards, though. :-) Suppose one could use some form of auto-correct in one's IDE...

-- T.J. Crowder

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss