Coder Social home page Coder Social logo

using_statement's Introduction

using_statement

npm version CI deno doc

Function call that acts like a using statement.

With Deno:

import { using } from "https://deno.land/x/using_statement/mod.ts";

Or with Node:

npm install --save using-statement

Example

Before:

const camera = new Camera();
try {
  outputPicture(camera.takePictureSync());
} finally {
  camera.dispose();
}

After:

import { using } from "https://deno.land/x/using_statement/mod.ts";

using(new Camera(), (camera) => {
  outputPicture(camera.takePictureSync());
});

Features

  • Supports synchronous, asynchronous, and generator functions.
  • Handles exceptions to ensure the resource is properly disposed.
  • Accepts objects with a dispose(), close(), or unsubscribe() method.
  • Allows asynchronously disposing when using a synchronous or asynchronous function.

Examples

Setup:

// Camera.ts
export class Camera {
  takePictureSync() {
    // ...etc...
    return pictureData;
  }

  async takePicture() {
    // ...etc...
    return pictureData;
  }

  dispose() {
    // clean up the resource this class is holding
  }
}

Synchronous example:

import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";

using(new Camera(), (camera) => {
  const picture = camera.takePictureSync();
  outputPicture(picture); // some function that outputs the picture
});

// camera is disposed here

Asynchronous example:

import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";

await using(new Camera(), async (camera) => {
  const picture = await camera.takePicture();
  outputPicture(picture);
});

// camera is disposed here

Generator function example:

import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";

const picturesIterator = using(new Camera(), function* (camera) {
  for (let i = 0; i < 10; i++) {
    yield camera.takePictureSync();
  }
});

// camera is not disposed yet...

for (const picture of picturesIterator) {
  outputPicture(picture);
}

// camera is now disposed

Inspiration

using_statement's People

Contributors

dsherret avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

using_statement's Issues

Dispose multiple resources in a single statement

using(new Camera(), new Camera(), (cameraA, cameraB) => {
    outputPicture(cameraA.takePictureSync());
    outputPicture(cameraB.takePictureSync());
});

Edit: Should be #1 (comment)

This is inspired by https://github.com/tc39/proposal-explicit-resource-management

// avoids leaking `a` or `b` to outer scope
// ensures `b` is disposed before `a` in case `b` depends on `a`
// ensures `a` is disposed even if disposing `b` throws
try (const a = ..., b = ...) { 
  ...
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.